Jieunny의 λΈ”λ‘œκ·Έ

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - 성격 μœ ν˜• κ²€μ‚¬ν•˜κΈ° λ³Έλ¬Έ

Study/Coding Test

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - 성격 μœ ν˜• κ²€μ‚¬ν•˜κΈ°

Jieunny 2023. 2. 2. 14:53

πŸ“Œ  문제

λ‚˜λ§Œμ˜ 카카였 성격 μœ ν˜• 검사지λ₯Ό λ§Œλ“€λ €κ³  ν•©λ‹ˆλ‹€.
성격 μœ ν˜• κ²€μ‚¬λŠ” λ‹€μŒκ³Ό 같은 4개 μ§€ν‘œλ‘œ 성격 μœ ν˜•μ„ κ΅¬λΆ„ν•©λ‹ˆλ‹€. 성격은 각 μ§€ν‘œμ—μ„œ 두 μœ ν˜• 쀑 ν•˜λ‚˜λ‘œ κ²°μ •λ©λ‹ˆλ‹€.

μ§€ν‘œ λ²ˆν˜Έμ„±κ²© μœ ν˜•

1번 μ§€ν‘œ λΌμ΄μ–Έν˜•(R), νŠœλΈŒν˜•(T)
2번 μ§€ν‘œ μ½˜ν˜•(C), ν”„λ‘œλ„ν˜•(F)
3번 μ§€ν‘œ μ œμ΄μ§€ν˜•(J), λ¬΄μ§€ν˜•(M)
4번 μ§€ν‘œ μ–΄ν”ΌμΉ˜ν˜•(A), λ„€μ˜€ν˜•(N)

4개의 μ§€ν‘œκ°€ μžˆμœΌλ―€λ‘œ 성격 μœ ν˜•μ€ 총 16(=2 x 2 x 2 x 2)가지가 λ‚˜μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, "RFMN"μ΄λ‚˜ "TCMA"와 같은 성격 μœ ν˜•μ΄ μžˆμŠ΅λ‹ˆλ‹€.

κ²€μ‚¬μ§€μ—λŠ” 총 n개의 질문이 있고, 각 μ§ˆλ¬Έμ—λŠ” μ•„λž˜μ™€ 같은 7개의 선택지가 μžˆμŠ΅λ‹ˆλ‹€.

  • 맀우 λΉ„λ™μ˜
  • λΉ„λ™μ˜
  • μ•½κ°„ λΉ„λ™μ˜
  • λͺ¨λ₯΄κ² μŒ
  • μ•½κ°„ λ™μ˜
  • λ™μ˜
  • 맀우 λ™μ˜

각 μ§ˆλ¬Έμ€ 1가지 μ§€ν‘œλ‘œ 성격 μœ ν˜• 점수λ₯Ό νŒλ‹¨ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ–΄λ–€ ν•œ μ§ˆλ¬Έμ—μ„œ 4번 μ§€ν‘œλ‘œ μ•„λž˜ ν‘œμ²˜λŸΌ 점수λ₯Ό 맀길 수 μžˆμŠ΅λ‹ˆλ‹€.

선택지성격 μœ ν˜• 점수

맀우 λΉ„λ™μ˜ λ„€μ˜€ν˜• 3점
λΉ„λ™μ˜ λ„€μ˜€ν˜• 2점
μ•½κ°„ λΉ„λ™μ˜ λ„€μ˜€ν˜• 1점
λͺ¨λ₯΄κ² μŒ μ–΄λ–€ 성격 μœ ν˜•λ„ 점수λ₯Ό 얻지 μ•ŠμŠ΅λ‹ˆλ‹€
μ•½κ°„ λ™μ˜ μ–΄ν”ΌμΉ˜ν˜• 1점
λ™μ˜ μ–΄ν”ΌμΉ˜ν˜• 2점
맀우 λ™μ˜ μ–΄ν”ΌμΉ˜ν˜• 3점

μ΄λ•Œ κ²€μ‚¬μžκ°€ μ§ˆλ¬Έμ—μ„œ μ•½κ°„ λ™μ˜ μ„ νƒμ§€λ₯Ό 선택할 경우 μ–΄ν”ΌμΉ˜ν˜•(A) 성격 μœ ν˜• 1점을 λ°›κ²Œ λ©λ‹ˆλ‹€. λ§Œμ•½ κ²€μ‚¬μžκ°€ λ§€μš° λΉ„λ™μ˜ μ„ νƒμ§€λ₯Ό 선택할 경우 λ„€μ˜€ν˜•(N) 성격 μœ ν˜• 3점을 λ°›κ²Œ λ©λ‹ˆλ‹€.

μœ„ μ˜ˆμ‹œμ²˜λŸΌ λ„€μ˜€ν˜•μ΄ λΉ„λ™μ˜, μ–΄ν”ΌμΉ˜ν˜•μ΄ λ™μ˜μΈ 경우만 주어지지 μ•Šκ³ , μ§ˆλ¬Έμ— 따라 λ„€μ˜€ν˜•μ΄ λ™μ˜, μ–΄ν”ΌμΉ˜ν˜•μ΄ λΉ„λ™μ˜μΈ κ²½μš°λ„ μ£Όμ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
ν•˜μ§€λ§Œ 각 μ„ νƒμ§€λŠ” 고정적인 크기의 점수λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.

  • 맀우 λ™μ˜λ‚˜ λ§€μš° λΉ„λ™μ˜ μ„ νƒμ§€λ₯Ό μ„ νƒν•˜λ©΄ 3점을 μ–»μŠ΅λ‹ˆλ‹€.
  • λ™μ˜λ‚˜ λΉ„λ™μ˜ μ„ νƒμ§€λ₯Ό μ„ νƒν•˜λ©΄ 2점을 μ–»μŠ΅λ‹ˆλ‹€.
  • μ•½κ°„ λ™μ˜λ‚˜ μ•½κ°„ λΉ„λ™μ˜ μ„ νƒμ§€λ₯Ό μ„ νƒν•˜λ©΄ 1점을 μ–»μŠ΅λ‹ˆλ‹€.
  • λͺ¨λ₯΄κ² μŒ μ„ νƒμ§€λ₯Ό μ„ νƒν•˜λ©΄ 점수λ₯Ό 얻지 μ•ŠμŠ΅λ‹ˆλ‹€.

검사 κ²°κ³ΌλŠ” λͺ¨λ“  질문의 성격 μœ ν˜• 점수λ₯Ό λ”ν•˜μ—¬ 각 μ§€ν‘œμ—μ„œ 더 높은 점수λ₯Ό 받은 성격 μœ ν˜•μ΄ κ²€μ‚¬μžμ˜ 성격 μœ ν˜•μ΄λΌκ³  νŒλ‹¨ν•©λ‹ˆλ‹€. 단, ν•˜λ‚˜μ˜ μ§€ν‘œμ—μ„œ 각 성격 μœ ν˜• μ μˆ˜κ°€ κ°™μœΌλ©΄, 두 성격 μœ ν˜• 쀑 사전 순으둜 λΉ λ₯Έ 성격 μœ ν˜•μ„ κ²€μ‚¬μžμ˜ 성격 μœ ν˜•μ΄λΌκ³  νŒλ‹¨ν•©λ‹ˆλ‹€.

μ§ˆλ¬Έλ§ˆλ‹€ νŒλ‹¨ν•˜λŠ” μ§€ν‘œλ₯Ό 담은 1차원 λ¬Έμžμ—΄ λ°°μ—΄ survey와 κ²€μ‚¬μžκ°€ 각 μ§ˆλ¬Έλ§ˆλ‹€ μ„ νƒν•œ 선택지λ₯Ό 담은 1차원 μ •μˆ˜ λ°°μ—΄ choicesκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. μ΄λ•Œ, κ²€μ‚¬μžμ˜ 성격 μœ ν˜• 검사 κ²°κ³Όλ₯Ό μ§€ν‘œ 번호 μˆœμ„œλŒ€λ‘œ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.


μ œν•œμ‚¬ν•­

  • 1 ≤ survey의 길이 ( = n) ≤ 1,000
    • survey의 μ›μ†ŒλŠ” "RT", "TR", "FC", "CF", "MJ", "JM", "AN", "NA" μ€‘ ν•˜λ‚˜μž…λ‹ˆλ‹€.
    • survey[i]의 첫 번째 μΊλ¦­ν„°λŠ” i+1번 질문의 λΉ„λ™μ˜ κ΄€λ ¨ 선택지λ₯Ό μ„ νƒν•˜λ©΄ λ°›λŠ” 성격 μœ ν˜•μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
    • survey[i]의 두 번째 μΊλ¦­ν„°λŠ” i+1번 질문의 λ™μ˜ κ΄€λ ¨ 선택지λ₯Ό μ„ νƒν•˜λ©΄ λ°›λŠ” 성격 μœ ν˜•μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
  • choices의 길이 = survey의 길이
    • choices[i]λŠ” κ²€μ‚¬μžκ°€ μ„ νƒν•œ i+1번째 질문의 선택지λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
    • 1 ≤ choices의 μ›μ†Œ ≤ 7

    choices 뜻
    1 맀우 λΉ„λ™μ˜
    2 λΉ„λ™μ˜
    3 μ•½κ°„ λΉ„λ™μ˜
    4 λͺ¨λ₯΄κ² μŒ
    5 μ•½κ°„ λ™μ˜
    6 λ™μ˜
    7 맀우 λ™μ˜

 

πŸ’‘  아이디어

μ§€ν‘œλŠ” 객체둜, scoreλŠ” λ°°μ—΄λ‘œ μ €μž₯ν•΄λ‘”λ‹€.

survey λŒλ©΄μ„œ 4보닀 μž‘μœΌλ©΄ survey의 각 μš”μ†Œ 쀑 μ•ž μœ ν˜• => indicatorsμ—μ„œ κ·Έ μœ ν˜• μ°Ύμ•„μ„œ score λ°°μ—΄μ—μ„œ μ„ νƒν•œ λ²ˆν˜Έμ— ν•΄λ‹Ήν•˜λŠ” 점수λ₯Ό 더해쀀닀.

각 μ§€ν‘œ λ³„λ‘œ 크기 λΉ„κ΅ν•˜λ©΄μ„œ 큰 κ±Έ answer에 더해쀀닀.

 

✏️  풀이

function solution(survey, choices) {
  var answer = '';
  const indicators = { // μœ ν˜•κ³Ό 점수 μ €μž₯ν•œ 객체
    'R': 0, 
    'T': 0,
    'C': 0, 
    'F': 0, 
    'J': 0, 
    'M': 0, 
    'A': 0, 
    'N': 0
  };
  const score = [3, 2, 1, 0, 1, 2, 3];	// μŠ€μ½”μ–΄ μˆœμ„œλŒ€λ‘œ μ €μž₯
  
  for(let i=0; i<survey.length; i++){
    if(choices[i] < 4){	// 선택 λ²ˆν˜Έκ°€ 4보닀 μž‘μœΌλ©΄ μ•žμ— μœ ν˜• μ„ νƒν•œκ²ƒ
      indicators[survey[i][0]] += score[choices[i]-1];	// choicesλŠ” 1λΆ€ν„° μ‹œμž‘ν•˜λ―€λ‘œ -1 ν•΄μ€€λ‹€.
    }
    else if(choices[i] > 4){	// 선택 λ²ˆν˜Έκ°€ 4보닀 크면 뒀에 μœ ν˜• μ„ νƒν•œ 것
      indicators[survey[i][1]] += score[choices[i]-1];
    }
  }

  if(indicators['R'] > indicators['T']) answer += 'R';
  else if(indicators['R'] < indicators['T']) answer += 'T';
  else answer += 'R';

  if(indicators['C'] > indicators['F']) answer += 'C';
  else if(indicators['C'] < indicators['F']) answer += 'F';
  else answer += 'C';

  if(indicators['J'] > indicators['M']) answer += 'J';
  else if(indicators['J'] < indicators['M']) answer += 'M';
  else answer += 'J';

  if(indicators['A'] > indicators['N']) answer += 'A';
  else if(indicators['A'] < indicators['N']) answer += 'N';
  else answer += 'A';

  return answer;
}