프로그래머스 2022 KAKAO TECH INTERNSHIP Level 1 문제 성격 유형 검사하기를 Java를 이용해 풀어보았다.
다들 HashMap을 이용해서 풀었던데 나는 그냥 구현으로 풀어보았다. 기존 코드에서 좀 더 간결하게 만들어보려고 한다.
문제 링크 첨부한다.
https://school.programmers.co.kr/learn/courses/30/lessons/118666
다들 올려둔 풀이대로 HashMap을 이용하면 깔끔하고 멋진 풀이가 가능하다. 하지만 나는 시간 들여 깔끔한 풀이로 풀진 않았고, 시간 제한을 두고 실제 시험에서의 상황을 가정하고 생각나는 대로 빠르게 풀어보았더니 좀 길게 힘으로 밀어 붙이듯이 풀었다.
코드는 다음과 같다.
class Solution {
public String solution(String[] survey, int[] choices) {
String answer = "";
int[][] score = new int[4][2];
int length = survey.length;
for(int i=0; i<length; i++){
String s = survey[i];
int n = choices[i];
if(n==4) continue;
int realScore = Math.abs(4-n);
switch(s){
case "RT":
if(n<4) score[0][0] += realScore;
else score[0][1] += realScore;
break;
case "TR":
if(n<4) score[0][1] += realScore;
else score[0][0] += realScore;
break;
case "CF":
if(n<4) score[1][0] += realScore;
else score[1][1] += realScore;
break;
case "FC":
if(n<4) score[1][1] += realScore;
else score[1][0] += realScore;
break;
case "JM":
if(n<4) score[2][0] += realScore;
else score[2][1] += realScore;
break;
case "MJ":
if(n<4) score[2][1] += realScore;
else score[2][0] += realScore;
break;
case "AN":
if(n<4) score[3][0] += realScore;
else score[3][1] += realScore;
break;
case "NA":
if(n<4) score[3][1] += realScore;
else score[3][0] += realScore;
break;
}
}
String[][] ary = { {"R", "T"}, {"C", "F"}, {"J", "M"}, {"A", "N"} };
for(int i=0; i<4; i++){
int tmp = score[i][0] - score[i][1];
if(tmp>=0){ // 사전순
answer += ary[i][0];
}
else{ // 역순
answer += ary[i][1];
}
}
return answer;
}
}
반복되는 코드가 상당히 더럽다 ㅎㅎ.. 하지만 실제 풀이시간은 13분 남짓 되었기에 Level 1 문제에서는 크게 신경 쓸 필요 없이 빠르게 푸는 게 더 중요한 것 같긴 하다.
만약 위의 풀이의 큰 틀을 바꾸지 않은 채 코드를 줄이고 싶다면... 결국 HashMap 을 써야하는 결론이 났다. 위와 같이 각 케이스별로 모두 개별적으로 처리해주지 않으려면, 각 문자별로 값을 저장해줘야 하는데 그럴 때 사용할 수 있는 자료구조는 Map 구조 외에 생각나지 않는다. 그래서 그냥 이대로 두려고 한다... HashMap을 쓸 생각이 시험장에서 난다면 그리 풀고 아니면 그냥 힘으로 욱여 푸는 것으로..