Home πŸ„πŸ»β€β™€οΈ [μžλ°”μŠ€ν¬λ¦½νŠΈ] 성격 μœ ν˜• κ²€μ‚¬ν•˜κΈ°
Post
Cancel

πŸ„πŸ»β€β™€οΈ [μžλ°”μŠ€ν¬λ¦½νŠΈ] 성격 μœ ν˜• κ²€μ‚¬ν•˜κΈ°

πŸ“„ 문제

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 2022 KAKAO TECH INTERNSHIP 성격 μœ ν˜• κ²€μ‚¬ν•˜κΈ°

κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ” 것은

주어진 μ§€ν‘œμ™€ 선택지 λͺ©λ‘μ„ μˆœνšŒν•˜λ©° μ„±κ²©μœ ν˜•μ— 점수λ₯Ό λˆ„μ ν•΄μ•Ό ν•œλ‹€. λͺ¨λ“  μš”μ†Œλ₯Ό λ°©λ¬Έν•œ 후에 λŒ€μ‘λ˜λŠ” μ„±κ²©μœ ν˜•λΌλ¦¬ λΉ„κ΅ν•˜μ—¬ 더 높은 점수λ₯Ό 받은 μ„±κ²©μœ ν˜•μ„ νŒλ‹¨ν•œλ‹€.

1️⃣ μ§ˆλ¬Έμ„ μˆœνšŒν•˜λ©° 각 μ„±κ²©μœ ν˜•μ΄ 얻을 점수λ₯Ό λˆ„μ ν•΄μ•Ό ν•œλ‹€.

각 μ„±κ²©μœ ν˜•μ„ ν”„λ‘œνΌν‹°λ‘œ 가진 객체λ₯Ό μ„ μ–Έν•˜κ³  κΈ°λ³Έ 값은 0으둜 μ΄ˆκΈ°ν™”ν•œλ‹€.

νŠΉμ •ν•œ key값에 값을 λˆ„μ ν•˜κΈ° λ•Œλ¬Έμ— Map을 μ‚¬μš©ν–ˆλŠ”λ° μ½”λ“œκ°€ λ‹€μ†Œ κΈΈμ–΄μ‘Œλ‹€.

λ§Œμ•½ map μžμ²΄μ— key값에 λŒ€μ‘ν•˜λŠ” 값을 λͺ¨λ‘ μ΄ˆκΈ°ν™”λ₯Ό ν•œλ‹€λ©΄ map.put("R", 0)의 ꡬ문을 8번 λ°˜λ³΅ν•΄μ•Όν•˜κ³ , μ΄ˆκΈ°ν™”λ₯Ό ν•˜μ§€ μ•ŠμœΌλ©΄ ν•΄λ‹Ή key와 λŒ€μ‘ν•˜λŠ” 값이 map에 μ‘΄μž¬ν•˜λŠ”μ§€ 체크해야 ν•˜κΈ° λ•Œλ¬Έμ— 값을 μ‚½μž…ν•˜λŠ” κ΅¬λ¬Έμ—μ„œ map.put("R", map.get("R") || 0 + score)κ³Ό 같이 μ½”λ“œκ°€ κΈΈμ–΄μ Έ 객체λ₯Ό μ‚¬μš©ν•˜λŠ” λ°©λ²•μœΌλ‘œ μˆ˜μ •ν–ˆλ‹€.

1
2
3
const solution = (survey, choices) => {
  const result = { R: 0, T: 0, C: 0, F: 0, J: 0, M: 0, A: 0, N: 0 };
};

2️⃣ μ§ˆλ¬Έμ„ μˆœνšŒν•˜λ©΄μ„œ νŠΉμ • μ„±κ²©μœ ν˜•μ— 점수λ₯Ό λˆ„μ ν•œλ‹€.

문제 μ„€λͺ…에 λ”°λ₯΄λ©΄ survey[i]의 첫 번째 μΊλ¦­ν„°λŠ” i+1번 질문의 λΉ„λ™μ˜ κ΄€λ ¨ 선택지λ₯Ό μ„ νƒν•˜λ©΄ λ°›λŠ” 성격 μœ ν˜•μ„ μ˜λ―Έν•˜κ³ , survey[i]의 두 번째 μΊλ¦­ν„°λŠ” i+1번 질문의 λ™μ˜ κ΄€λ ¨ 선택지λ₯Ό μ„ νƒν•˜λ©΄ λ°›λŠ” 성격 μœ ν˜•μ„ μ˜λ―Έν•œλ‹€.

μ•„λž˜μ˜ ν‘œλŠ” survey[i](μ§ˆλ¬Έμ— λŒ€ν•œ 선택지λ₯Ό μ˜λ―Έν•œλ‹€.)의 뜻과 각 성격 μœ ν˜•μ— λΆ€μ—¬ν•˜λŠ” 점수λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

choicesλœ»λΆ€μ—¬λ˜λŠ” 점수
1맀우 λΉ„λ™μ˜3
2λΉ„λ™μ˜2
3μ•½κ°„ λΉ„λ™μ˜1
4λͺ¨λ₯΄κ² μŒ0
5μ•½κ°„ λ™μ˜1
6λ™μ˜2
7맀우 λ™μ˜3

1 ~ 3κΉŒμ§€λŠ” λΉ„λ™μ˜ 선택지, 5 ~ 7κΉŒμ§€λŠ” λ™μ˜ 선택지에 점수λ₯Ό λΆ€μ—¬ν•œλ‹€. 4λŠ” μ–΄λŠ 선택지에도 점수λ₯Ό λΆ€μ—¬ν•˜μ§€ μ•ŠλŠ”λ‹€. 그리고 λΆ€μ—¬ν•  점수의 κ°’λ§Œ λ³΄μ•˜μ„ λ•Œ, 1κ³Ό 7은 3점을, 2와 6은 2점, 3, 5λŠ” 1점을 λΆ€μ—¬ν•œλ‹€. μ΄λŠ” choices[i] κ°’μ—μ„œ 4λ₯Ό λΊ€ κ°’μ˜ μ ˆλŒ€κ°’μœΌλ‘œ λΆ€μ—¬ν•  점수λ₯Ό μ‰½κ²Œ 계산할 수 μžˆλ‹€.

예λ₯Ό λ“€μ–΄, survey[0]이 β€œAN”이며 choices[0]이 7이라면, choices[0]의 값이 5 ~ 7에 ν•΄λ‹Ήν•˜λ―€λ‘œ λ™μ˜ 선택지λ₯Ό μ„ νƒν•œ 것이고, νŒλ‹¨ μ§€ν‘œ 쀑 N μœ ν˜•μ— 3점(choices[0] - 4 = 3)을 λΆ€μ—¬ν•˜λŠ” 것이닀.

1
2
3
4
5
6
7
8
9
for (let i = 0; i < survey.length; i++) {
  // ꡬ쑰 λΆ„ν•΄ ν• λ‹ΉμœΌλ‘œ μ§ˆλ¬Έμ— λŒ€ν•œ λΉ„λ™μ˜ 선택 μ§€ν‘œμ™€ λ™μ˜ 선택 μ§€ν‘œλ₯Ό μΆ”μΆœν•œλ‹€.
  // μ§ˆλ¬Έμ— λŒ€ν•œ 선택이 λΉ„λ™μ˜ 관련이면 disAgree μœ ν˜•μ— 점수λ₯Ό λΆ€μ—¬ν•˜κ³ , λ™μ˜ 관련이면 agree μœ ν˜•μ— 점수λ₯Ό λΆ€μ—¬ν•œλ‹€.
  const [disAgree, agree] = survey[i].split("");

  // λΉ„λ™μ˜ λ˜λŠ” λ™μ˜ μ—¬λΆ€λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ 쀑간 값인 4보닀 크면 λ™μ˜, μž‘μœΌλ©΄ λΉ„λ™μ˜ μœ ν˜•μœΌλ‘œ νŒλ‹¨ν•œλ‹€.
  // λΆ€μ—¬ν•  μ μˆ˜λŠ” μ ˆλŒ€κ°’ ν•¨μˆ˜μΈ Math.absλ₯Ό μ΄μš©ν•΄μ„œ κ³„μ‚°ν•œλ‹€.
  result[choices[i] <= 4 ? disAgree : agree] += Math.abs(4 - choices[i]);
}

3️⃣ λͺ¨λ“  μ§ˆλ¬Έμ„ ν™•μΈν•˜μ˜€λ‹€λ©΄ λŒ€μ‘λ˜λŠ” μ„±κ²©μœ ν˜•λΌλ¦¬ λΉ„κ΅ν•˜μ—¬ 더 높은 점수λ₯Ό 가진 μœ ν˜•μ„ λ°˜ν™˜ν•œλ‹€.

질문 λͺ©λ‘μ„ μˆœνšŒν•˜κΈ° 전에 λŒ€μ‘λ˜λŠ” μ„±κ²©μœ ν˜•λΌλ¦¬ 배열에 μ €μž₯ν•΄λ‘”λ‹€. μ μˆ˜κ°’μ„ 비ꡐ할 λ•Œ 같은 값을 가지면 사전 순으둜 λΉ λ₯Έ 성격 μœ ν˜•μ„ κ²€μ‚¬μžμ˜ 성격 μœ ν˜•μ΄λΌκ³  νŒλ‹¨ν•˜λ―€λ‘œ 사전 순으둜 μ •λ ¬ν•΄μ•Όν•œλ‹€. 예λ₯Ό λ“€μ–΄, β€œTR”이 μ•„λ‹Œ β€œRTβ€λΌλŠ” 값을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

1
2
3
4
5
6
7
8
9
10
const TYPES = ["RT", "CF", "JM", "AN"];

/* ... μ§ˆλ¬Έμ„ μˆœνšŒν•˜λ©° μ„±κ²©μœ ν˜•μ— 점수λ₯Ό λΆ€μ—¬ν•œλ‹€ ... */

return TYPES.map((type) => {
  const [c1, c2] = type.split("");

  // 더 높은 점수λ₯Ό 가진 μœ ν˜•μ„ λ°˜ν™˜ν•˜λŠ”λ° 사전 순으둜 μ •λ ¬ν•΄λ’€κΈ° λ•Œλ¬Έμ— λ”°λ‘œ μ •λ ¬ν•  ν•„μš”μ—†λ‹€.
  return result[c1] < result[c2] ? c2 : c1;
}).join("");

🏹 μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const solution = (survey, choices) => {
  const TYPES = ["RT", "CF", "JM", "AN"];
  const result = { R: 0, T: 0, C: 0, F: 0, J: 0, M: 0, A: 0, N: 0 };

  for (let i = 0; i < survey.length; i++) {
    const [disAgree, agree] = survey[i].split("");
    const addScoreType = choices[i] <= 4 ? disAgree : agree;
    result[choices[i] <= 4 ? disAgree : agree] += Math.abs(4 - choices[i]);
  }

  return TYPES.map((type) => {
    const [c1, c2] = type.split("");
    return result[c1] < result[c2] ? c2 : c1;
  }).join("");
};
This post is licensed under CC BY 4.0 by the author.

πŸ“Έ 2022-11-02

πŸ„πŸ»β€β™€οΈ [μžλ°”μŠ€ν¬λ¦½νŠΈ] 이쀑 μš°μ„ μˆœμœ„ 큐