[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๋ฅผ ๊ธฐ์ ์ผ๋ก ๋์์ ๋ฏธ๋์๋ก ๋ถ๋ฅ๋จ
- ๋ง์ฝ choices[i]๊ฐ 6์ด๋ฉด:
- Math.abs(6 - 4)๋ฅผ ๊ณ์ฐํ๋ฉด ๊ฒฐ๊ณผ๋ 2๊ฐ ๋ฉ๋๋ค. (6์์ 4๋ฅผ ๋บ ๊ฐ์ ์ ๋๊ฐ)
- ๋ง์ฝ choices[i]๊ฐ 2์ด๋ฉด:
- Math.abs(2 - 4)๋ฅผ ๊ณ์ฐํ๋ฉด ๊ฒฐ๊ณผ๋ 2๊ฐ ๋ฉ๋๋ค. (2์์ 4๋ฅผ ๋บ ๊ฐ์ ์ ๋๊ฐ)
- ๋ง์ฝ 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;
}
์ฐธ๊ณ ์ฌ์ดํธ