코딩테스트
[JS] 2022 KAKAO TECH INTERNSHIP > 성격 유형 검사하기
차차한
2022. 8. 22. 14:51
function solution(survey, choices) {
var answer = '';
var arr = [0,3,2,1,0,1,2,3];
var map = new Map();
map.set("R", 0);
map.set("T", 0);
map.set("C", 0);
map.set("F", 0);
map.set("J", 0);
map.set("M", 0);
map.set("A", 0);
map.set("N", 0);
for(var i = 0; i < survey.length; i++){
var first = survey[i].charAt(0); //A, C, M, R, N
var second = survey[i].charAt(1);
if(choices[i] < 4){
var a = arr[choices[i]];
map.set(first, map.get(first) + a);
}else{
var b = arr[choices[i]];
map.set(second, map.get(second) + b);
}
}
if(map.get("R") > map.get("T") || map.get("R") == map.get("T")){
answer += "R"
}else{
answer += "T"
}
if(map.get("C") > map.get("F") || map.get("C") == map.get("F")){
answer += "C"
}else{
answer += "F"
}
if(map.get("J") > map.get("M") || map.get("J") == map.get("M")){
answer += "J"
}else{
answer += "M"
}
if(map.get("A") > map.get("N") || map.get("A") == map.get("N")){
answer += "A"
}else{
answer += "N"
}
return answer;
}
가장 최근 문제를 풀어봤다
푼 사람이 약 900명밖에 되지 않으니 질문하기에서도 뭐 찾아볼만한 내용이 없어서 정말 1부터 10까지 혼자 풀어냈다.
하드코딩으로 풀어내서 아쉬움이 남는 문제
var arr = [0,3,2,1,0,1,2,3];
var map = new Map();
map.set("R", 0);
map.set("T", 0);
map.set("C", 0);
map.set("F", 0);
map.set("J", 0);
map.set("M", 0);
map.set("A", 0);
map.set("N", 0);
arr 변수에는 답에 따른 점수를 배열로 만들어 저장했다.
0번 인덱스에 0은 순서맞추려고 임의로 넣은 숫자.. ㅎㅎ
만약에 1번 문제에서 3이라 답하면 arr[3]을 해서 점수 1을 가져오는 식으로 만들었다.
각 성격 유형은 map에 담아 key-value로 저장했고 점수를 비교해 점수가 큰 쪽의 key를 찾아 값을 더해주면 되겠다는 생각으로 문제를 풀었다.
for(var i = 0; i < survey.length; i++){
var first = survey[i].charAt(0); //A, C, M, R, N
var second = survey[i].charAt(1);
if(choices[i] < 4){
var a = arr[choices[i]];
map.set(first, map.get(first) + a);
}else{
var b = arr[choices[i]];
map.set(second, map.get(second) + b);
}
}
답변의 길이만큼 반복문을 돌렸다.
first, second 변수에는 각각 첫 번째 문자, 두 번째 문자를 담아줬다.
조건문에서 답변이 4보다 작으면 첫 번째 문자에 점수를 더해야 하니 arr[choice[i]]로 해당 점수를 찾고 map에서 키를 찾아 원래 있던 값에 점수를 더해줬다.
4보다 크면 두 번째 문자에 점수를 더해줬다.
if(map.get("R") > map.get("T") || map.get("R") == map.get("T")){
answer += "R"
}else{
answer += "T"
}
if(map.get("C") > map.get("F") || map.get("C") == map.get("F")){
answer += "C"
}else{
answer += "F"
}
if(map.get("J") > map.get("M") || map.get("J") == map.get("M")){
answer += "J"
}else{
answer += "M"
}
if(map.get("A") > map.get("N") || map.get("A") == map.get("N")){
answer += "A"
}else{
answer += "N"
}
하드코딩...;;
R의 value가 T의 value보다 크거나 같으면 answer에 R을 더해줬다. 이런 식으로 계속 반복..
생각해보니 왜 저렇게 썼는지.. ? 그냥 >= 로 쓰면 됐을 텐데 ... -.-
다른 분이 쓴 거에서는 삼항연산자로 깔끔하게 썼다!
훨씬 가독성있다
