Jieunny์˜ ๋ธ”๋กœ๊ทธ

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ณธ๋ฌธ

Study/Coding Test

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง

Jieunny 2023. 3. 3. 15:15

๐Ÿ“Œ  ๋ฌธ์ œ

์—ฌ๋Ÿฌ ์–ธ๋ก ์‚ฌ์—์„œ ์Ÿ์•„์ง€๋Š” ๋‰ด์Šค, ํŠนํžˆ ์†๋ณด์„ฑ ๋‰ด์Šค๋ฅผ ๋ณด๋ฉด ๋น„์Šท๋น„์Šทํ•œ ์ œ๋ชฉ์˜ ๊ธฐ์‚ฌ๊ฐ€ ๋งŽ์•„ ์ •์ž‘ ํ•„์š”ํ•œ ๊ธฐ์‚ฌ๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. Daum ๋‰ด์Šค์˜ ๊ฐœ๋ฐœ ์—…๋ฌด๋ฅผ ๋งก๊ฒŒ ๋œ ์‹ ์ž…์‚ฌ์› ํŠœ๋ธŒ๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค์–‘ํ•œ ๋‰ด์Šค๋ฅผ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์ œ์ ์„ ๊ฐœ์„ ํ•˜๋Š” ์—…๋ฌด๋ฅผ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ฐœ๋ฐœ์˜ ๋ฐฉํ–ฅ์„ ์žก๊ธฐ ์œ„ํ•ด ํŠœ๋ธŒ๋Š” ์šฐ์„  ์ตœ๊ทผ ํ™”์ œ๊ฐ€ ๋˜๊ณ  ์žˆ๋Š” "์นด์นด์˜ค ์‹ ์ž… ๊ฐœ๋ฐœ์ž ๊ณต์ฑ„" ๊ด€๋ จ ๊ธฐ์‚ฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ด๋ณด์•˜๋‹ค.

  • ์นด์นด์˜ค ์ฒซ ๊ณต์ฑ„..'๋ธ”๋ผ์ธ๋“œ' ๋ฐฉ์‹ ์ฑ„์šฉ
  • ์นด์นด์˜ค, ํ•ฉ๋ณ‘ ํ›„ ์ฒซ ๊ณต์ฑ„.. ๋ธ”๋ผ์ธ๋“œ ์ „ํ˜•์œผ๋กœ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ
  • ์นด์นด์˜ค, ๋ธ”๋ผ์ธ๋“œ ์ „ํ˜•์œผ๋กœ ์‹ ์ž… ๊ฐœ๋ฐœ์ž ๊ณต์ฑ„
  • ์นด์นด์˜ค ๊ณต์ฑ„, ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ฝ”๋”ฉ ๋Šฅ๋ ฅ๋งŒ ๋ณธ๋‹ค
  • ์นด์นด์˜ค, ์‹ ์ž… ๊ณต์ฑ„.. "์ฝ”๋”ฉ ์‹ค๋ ฅ๋งŒ ๋ณธ๋‹ค"
  • ์นด์นด์˜ค "์ฝ”๋”ฉ ๋Šฅ๋ ฅ๋งŒ์œผ๋กœ 2018 ์‹ ์ž… ๊ฐœ๋ฐœ์ž ๋ฝ‘๋Š”๋‹ค"

๊ธฐ์‚ฌ์˜ ์ œ๋ชฉ์„ ๊ธฐ์ค€์œผ๋กœ "๋ธ”๋ผ์ธ๋“œ ์ „ํ˜•"์— ์ฃผ๋ชฉํ•˜๋Š” ๊ธฐ์‚ฌ์™€ "์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ"์— ์ฃผ๋ชฉํ•˜๋Š” ๊ธฐ์‚ฌ๋กœ ๋‚˜๋‰˜๋Š” ๊ฑธ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ํŠœ๋ธŒ๋Š” ์ด๋“ค์„ ๊ฐ๊ฐ ๋ฌถ์–ด์„œ ๋ณด์—ฌ์ฃผ๋ฉด ์นด์นด์˜ค ๊ณต์ฑ„ ๊ด€๋ จ ๊ธฐ์‚ฌ๋ฅผ ์ฐพ์•„๋ณด๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์œ ์šฉํ•  ๋“ฏ์‹ถ์—ˆ๋‹ค.

์œ ์‚ฌํ•œ ๊ธฐ์‚ฌ๋ฅผ ๋ฌถ๋Š” ๊ธฐ์ค€์„ ์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋…ผ๋ฌธ๊ณผ ์ž๋ฃŒ๋ฅผ ์กฐ์‚ฌํ•˜๋˜ ํŠœ๋ธŒ๋Š” "์ž์นด๋“œ ์œ ์‚ฌ๋„"๋ผ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ƒˆ๋‹ค.

์ž์นด๋“œ ์œ ์‚ฌ๋„๋Š” ์ง‘ํ•ฉ ๊ฐ„์˜ ์œ ์‚ฌ๋„๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ• ์ค‘์˜ ํ•˜๋‚˜๋กœ ์•Œ๋ ค์ ธ ์žˆ๋‹ค. ๋‘ ์ง‘ํ•ฉ A, B ์‚ฌ์ด์˜ ์ž์นด๋“œ ์œ ์‚ฌ๋„ J(A, B)๋Š” ๋‘ ์ง‘ํ•ฉ์˜ ๊ต์ง‘ํ•ฉ ํฌ๊ธฐ๋ฅผ ๋‘ ์ง‘ํ•ฉ์˜ ํ•ฉ์ง‘ํ•ฉ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆˆ ๊ฐ’์œผ๋กœ ์ •์˜๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ง‘ํ•ฉ A = {1, 2, 3}, ์ง‘ํ•ฉ B = {2, 3, 4}๋ผ๊ณ  ํ•  ๋•Œ, ๊ต์ง‘ํ•ฉ A ∩ B = {2, 3}, ํ•ฉ์ง‘ํ•ฉ A ∪ B = {1, 2, 3, 4}์ด ๋˜๋ฏ€๋กœ, ์ง‘ํ•ฉ A, B ์‚ฌ์ด์˜ ์ž์นด๋“œ ์œ ์‚ฌ๋„ J(A, B) = 2/4 = 0.5๊ฐ€ ๋œ๋‹ค. ์ง‘ํ•ฉ A์™€ ์ง‘ํ•ฉ B๊ฐ€ ๋ชจ๋‘ ๊ณต์ง‘ํ•ฉ์ผ ๊ฒฝ์šฐ์—๋Š” ๋‚˜๋ˆ—์…ˆ์ด ์ •์˜๋˜์ง€ ์•Š์œผ๋‹ˆ ๋”ฐ๋กœ J(A, B) = 1๋กœ ์ •์˜ํ•œ๋‹ค.

์ž์นด๋“œ ์œ ์‚ฌ๋„๋Š” ์›์†Œ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋Š” ๋‹ค์ค‘์ง‘ํ•ฉ์— ๋Œ€ํ•ด์„œ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์ค‘์ง‘ํ•ฉ A๋Š” ์›์†Œ "1"์„ 3๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋‹ค์ค‘์ง‘ํ•ฉ B๋Š” ์›์†Œ "1"์„ 5๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ํ•˜์ž. ์ด ๋‹ค์ค‘์ง‘ํ•ฉ์˜ ๊ต์ง‘ํ•ฉ A ∩ B๋Š” ์›์†Œ "1"์„ min(3, 5)์ธ 3๊ฐœ, ํ•ฉ์ง‘ํ•ฉ A ∪ B๋Š” ์›์†Œ "1"์„ max(3, 5)์ธ 5๊ฐœ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๋‹ค์ค‘์ง‘ํ•ฉ A = {1, 1, 2, 2, 3}, ๋‹ค์ค‘์ง‘ํ•ฉ B = {1, 2, 2, 4, 5}๋ผ๊ณ  ํ•˜๋ฉด, ๊ต์ง‘ํ•ฉ A ∩ B = {1, 2, 2}, ํ•ฉ์ง‘ํ•ฉ A ∪ B = {1, 1, 2, 2, 3, 4, 5}๊ฐ€ ๋˜๋ฏ€๋กœ, ์ž์นด๋“œ ์œ ์‚ฌ๋„ J(A, B) = 3/7, ์•ฝ 0.42๊ฐ€ ๋œ๋‹ค.

์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด ์‚ฌ์ด์˜ ์œ ์‚ฌ๋„๋ฅผ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ์ž์—ด "FRANCE"์™€ "FRENCH"๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋ฅผ ๋‘ ๊ธ€์ž์”ฉ ๋Š์–ด์„œ ๋‹ค์ค‘์ง‘ํ•ฉ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ฐ๊ฐ {FR, RA, AN, NC, CE}, {FR, RE, EN, NC, CH}๊ฐ€ ๋˜๋ฉฐ, ๊ต์ง‘ํ•ฉ์€ {FR, NC}, ํ•ฉ์ง‘ํ•ฉ์€ {FR, RA, AN, NC, CE, RE, EN, CH}๊ฐ€ ๋˜๋ฏ€๋กœ, ๋‘ ๋ฌธ์ž์—ด ์‚ฌ์ด์˜ ์ž์นด๋“œ ์œ ์‚ฌ๋„ J("FRANCE", "FRENCH") = 2/8 = 0.25๊ฐ€ ๋œ๋‹ค.

 

๐Ÿ’ก  ์•„์ด๋””์–ด

st1, str2 ๊ฐ๊ฐ for๋ฌธ ๋Œ๋ฉด์„œ ๋‘๊ฐœ์”ฉ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์„ ๊ตฌํ•ด์ค€๋‹ค. 

์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ด์„œ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์— ์ˆซ์ž๋‚˜ ๊ณต๋ฐฑ, ํŠน์ˆ˜ ๊ธฐํ˜ธ๊ฐ€ ์žˆ์œผ๋ฉด ๋„ฃ์ง€์•Š๊ณ , ์—†์œผ๋ฉด ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ”์„œ ์ƒˆ ๋ฐฐ์—ด์— ๋„ฃ์–ด์ค€๋‹ค.

(๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์•ˆํ•˜๋ฏ€๋กœ)

str1Arr, str2Arr ๋ฐฐ์—ด์„  ๊ฐ๊ฐ ๊ตฌํ•ด์ค€ ๋‹ค์Œ, str1Arr์„ ๋Œ๋ฉด์„œ ๊ทธ ์›์†Œ๊ฐ€ str2Arr์— ์žˆ์œผ๋ฉด ๊ต์ง‘ํ•ฉ ๊ฐœ์ˆ˜๋ฅผ +1 ํ•ด์ค€๋‹ค.

์ด๋•Œ, ์ด๋ฏธ ํ•œ๋ฒˆ ๊ต์ง‘ํ•ฉ์œผ๋กœ ์„ ํƒ๋œ ์›์†Œ๋Š” ๋‹ค์Œ์— ๊ฐ™์€ ์›์†Œ๊ฐ€ ๋˜ ๋‚˜์™”์„ ๋•Œ ๋˜ ๊ต์ง‘ํ•ฉ์œผ๋กœ ์„ ํƒ๋˜๋ฉด ์•ˆ๋˜๋ฏ€๋กœ ๋น„๊ต๋Œ€์ƒ์ธ str2Arr์—์„œ ํ•œ๋ฒˆ ๊ต์ง‘ํ•ฉ ์ด์—ˆ๋˜ ์›์†Œ๋Š” ์ œ๊ฑฐํ•ด์ค€๋‹ค.

์ด ๊ณผ์ •์„ ๋‹ค ๊ฑฐ์น˜๊ณ , ๊ต์ง‘ํ•ฉ ๊ฐœ์ˆ˜์™€ ํ•ฉ์ง‘ํ•ฉ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์„œ ๋‚˜๋ˆ ์ค€ ๋‹ค์Œ 65536์„ ๊ณฑํ•ด์ค€๋‹ค.

์ด๋•Œ ๊ต์ง‘ํ•ฉ์€ ์—†์œผ๋‚˜ ํ•ฉ์ง‘ํ•ฉ์€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ต์€ 0์ด๊ณ , ๊ต์ง‘ํ•ฉ๊ณผ ํ•ฉ์ง‘ํ•ฉ ๋‘˜๋‹ค ์—†๋Š” ๊ฒฝ์šฐ ๋‹ต์€ 65536์ด ๋˜์–ด์•ผํ•˜๋ฏ€๋กœ ๋ถ„๊ธฐ๋ฅผ ๋‚˜๋ˆ  ๋‹ต์„ ํ• ๋‹นํ•ด์ค€๋‹ค.

 

โœ๏ธ  ํ’€์ด

function solution(str1, str2) {
  var answer = 0;
  let eng = /^[a-zA-Z]*$/;
  let str1Arr = [];
  let str2Arr = [];
  let interCount = 0;
  let unionCount = 0;

  for(let i=0; i<str1.length-1; i++){
    let set = str1.slice(i, i+2);
    if(eng.test(set) === true) str1Arr.push(set.toLowerCase());
  }

  for(let i=0; i<str2.length-1; i++){
    let set = str2.slice(i, i+2);
    if(eng.test(set) === true) {
      str2Arr.push(set.toLowerCase());
    }
  }

  let str2Length = str2Arr.length;
  //str2Length๋Š” ๊ต์ง‘ํ•ฉ ์›์†Œ๋ฅผ ์‚ญ์ œํ• ๊ฑฐ๊ธฐ๋•Œ๋ฌธ์— ํ•ฉ์ง‘ํ•ฉ ๊ตฌํ•  ๋•Œ ์‚ฌ์šฉํ•  ๊ธธ์ด๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌํ•ด์ค€๋‹ค.

  for(let i=0; i<str1Arr.length; i++){
    if(str2Arr.includes(str1Arr[i])) {
      str2Arr.splice(str2Arr.indexOf(str1Arr[i]), 1);
      interCount++;
    }
  }
  
  unionCount = (str1Arr.length + str2Length) - interCount;

  if(interCount === 0 && unionCount === 0) answer = 65536
  else if(interCount === 0 && unionCount !== 0) answer = 0;
  else answer = Math.floor((interCount / unionCount) * 65536)
  
  
  return answer;
}