๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[JavaScript] 2022 KAKAO TECH INTERNSHIP_๋ฌธ์ œํ’€์ด_ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_๋ ˆ๋ฒจ_1

by ๋‰ด์ชผ๋ฏธ 2024. 1. 2.

[JavaScript] 2022 KAKAO TECH INTERNSHIP ๋ฌธ์ œํ’€์ด

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_๋ ˆ๋ฒจ_1

 

https://school.programmers.co.kr/learn/courses/30/lessons/118666

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

 

โœจ ๋ฌธ์ œ ์„ค๋ช…

๋‚˜๋งŒ์˜ ์นด์นด์˜ค ์„ฑ๊ฒฉ ์œ ํ˜• ๊ฒ€์‚ฌ์ง€๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์„ฑ๊ฒฉ ์œ ํ˜• ๊ฒ€์‚ฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 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" ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
    • urvey[i]์˜ ์ฒซ ๋ฒˆ์งธ ์บ๋ฆญํ„ฐ๋Š” i+1๋ฒˆ ์งˆ๋ฌธ์˜ ๋น„๋™์˜ ๊ด€๋ จ ์„ ํƒ์ง€๋ฅผ ์„ ํƒํ•˜๋ฉด ๋ฐ›๋Š” ์„ฑ๊ฒฉ ์œ ํ˜•์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • survey[i]์˜ ๋‘ ๋ฒˆ์งธ ์บ๋ฆญํ„ฐ๋Š” i+1๋ฒˆ ์งˆ๋ฌธ์˜ ๋™์˜ ๊ด€๋ จ ์„ ํƒ์ง€๋ฅผ ์„ ํƒํ•˜๋ฉด ๋ฐ›๋Š” ์„ฑ๊ฒฉ ์œ ํ˜•์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  •  
    choices ๋œป
    1 ๋งค์šฐ ๋น„๋™์˜
    2 ๋น„๋™์˜
    3 ์•ฝ๊ฐ„ ๋น„๋™์˜
    4 ๋ชจ๋ฅด๊ฒ ์Œ
    5 ์•ฝ๊ฐ„ ๋™์˜
    6 ๋™์˜
    7 ๋งค์šฐ ๋™์˜
  • choices์˜ ๊ธธ์ด = survey์˜ ๊ธธ์ด
    • choices[i]๋Š” ๊ฒ€์‚ฌ์ž๊ฐ€ ์„ ํƒํ•œ i+1๋ฒˆ์งธ ์งˆ๋ฌธ์˜ ์„ ํƒ์ง€๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • 1 ≤ choices์˜ ์›์†Œ ≤ 7

 

๐Ÿ’ก๋ฌธ์ œ ํ’€์ด

์ ‘๊ทผ๋ฐฉ์‹

์‹œ๊ฐ„๋‚ด ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•ด์•ผํ• ์ง€ ์ƒ๊ฐ์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์•„์„œ ๋‹ค๋ฅธ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค. 

 

 1. survey ["AN", "CF", "MJ", "RT", "NA"]

    - ๋น„๋™์˜(1~3) /4 ๋ฌด์‹œ/ ๋™์˜(5~7)

2. choices์˜ ์ˆซ์ž๊ฐ€ ๋ญ๋ƒ์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•ด์ฃผ๊ธฐ

  ๋œป ๊ตฌ๋ถ„
1 • ๋งค์šฐ ๋น„๋™์˜ noAgreement

2 • ๋น„๋™์˜
3 • ์•ฝ๊ฐ„ ๋น„๋™์˜
 4 ๋ชจ๋ฅด๊ฒ ์Œ ํ•„์š”์—†๋Š” ๊ฐ’
 5 • ์•ฝ๊ฐ„ ๋™์˜
agreement
 6 • ๋™์˜
 7 • ๋งค์šฐ ๋™์˜

 

- ์˜ˆ์‹œ 

"AN" ์•ž๊ธ€์ž๋Š”A๋Š” noAgreement / N์€agreement ๋กœ ๋ถ„๋ฆฌํ•ด์คŒ

๋งŒ์•ฝ choices [5, 3, 2, 7, 5] ์ด๋ฉด ์ฒซ๋ฒˆ์งธ๋กœ 5๊ฐ€ ๋‚˜์™”๋‹ค๋ฉด ์•ฝ๊ฐ„๋™์˜๋กœ ์•ฝ๊ฐ„๋™์˜๋Š” agreement ์— ํ•ด๋‹น ๊ทธ๋ž˜์„œ N์— score๋ฅผ ๋”ํ•ด์คŒ

 

3. score์— ๊ฐ’์„ ์ ˆ๋Œ€๊ฐ’์œผ๋กœ ๋„ฃ๋Š” ์ด์œ ๋Š” 4๋ฅผ ๊ธฐ์ ์œผ๋กœ ๋™์˜์™€ ๋ฏธ๋™์˜๋กœ ๋ถ„๋ฅ˜๋จ

 

  1. ๋งŒ์•ฝ choices[i]๊ฐ€ 6์ด๋ฉด:
    • Math.abs(6 - 4)๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” 2๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. (6์—์„œ 4๋ฅผ ๋บ€ ๊ฐ’์˜ ์ ˆ๋Œ€๊ฐ’)
  2. ๋งŒ์•ฝ choices[i]๊ฐ€ 2์ด๋ฉด:
    • Math.abs(2 - 4)๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” 2๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. (2์—์„œ 4๋ฅผ ๋บ€ ๊ฐ’์˜ ์ ˆ๋Œ€๊ฐ’)
  3. ๋งŒ์•ฝ choices[i]๊ฐ€ 4์ด๋ฉด:
    • Math.abs(4 - 4)๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” 0์ด ๋ฉ๋‹ˆ๋‹ค. (4์—์„œ 4๋ฅผ ๋บ€ ๊ฐ’์˜ ์ ˆ๋Œ€๊ฐ’)

 

4. type์— ์„ ์–ธํ•œ ๊ธ€์ž ์ˆœ์„œ๋Œ€๋กœ ๋‘๊ฐœ์”ฉ ๋น„๊ต๋ฅผํ•ด์ค˜์„œ ์™ผ์ชฝ >=์˜ค๋ฅธ์ชฝ ์ด๋ฉด ์™ผ์ชฝ๊ป„ ์•„๋‹ˆ๋ฉด ์˜ค๋ฅธ์ชฝ๊ฑธ๋กœ answer 4๊ฐœ๊ฐ€ ๋˜๋ฉด ๋ฆฌํ„ดํ•จ 

function solution(survey, choices) {
    var answer = '';
    let type ={ R: 0, T: 0, C: 0, F: 0, J: 0, M: 0, A: 0, N: 0};
    // ๋น„๋™์˜(1~3) 1๋ถ€ํ„ฐ  3์ ~1์  ์ถ”๊ฐ€/ 4 ๋ฌด์‹œ /๋™์˜(5~7) ๋™์˜์— 1~3์  ์ถ”๊ฐ€
    for(let i=0; i< choices.length; i++) {
        let [noAgreement,agreement] = survey[i].split(''); 
        let score = Math.abs(choices[i] -4);
        if(choices[i] > 4) {
            type[agreement] += score;
        }else if(choices[i] < 4) {
            type[noAgreement] += score;
        }
        
    }
    const typeArr = Object.keys(type);
    
    for(let i=0; i<typeArr.length; i+=2) {
        if(answer.length === 4) return answer;
        let leftScore = type[typeArr[i]];
        let rightScore = type[typeArr[i+1]];
        
        if(leftScore >= rightScore){
            answer+= typeArr[i]
        }else{
            answer+= typeArr[i+1]
        }                         
    }


    return answer;
}

 

 

 

์ฐธ๊ณ ์‚ฌ์ดํŠธ

https://velog.io/@ppmyor/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4Programmers-%EC%84%B1%EA%B2%A9-%EC%9C%A0%ED%98%95-%EA%B2%80%EC%82%AC%ED%95%98%EA%B8%B0-javascript