⭐아이디어
(012 3 456) index
123 4 567 실제 번호
321 0 123 번호에 따른 획득 점수
점수map을 만든다 1234567 에 대해 3210123을 만들자
-> map 말고 switch를 활용한 함수를 만들어도 될듯
- 코드구상
성격별 점수를 저장할 점수map을 만들고 값을 더해나가자
survey와 choices 기준으로 순회하자 (index 기준)
index가 4일경우 넘어간다
choices가 4보다 크면 char[1]에 4보다 작으면 char[0]에 해당 점수를 더해주자
StringBuilder를 만들고
(R T)(C F)(J M)(A N)로 된 배열을 만들어 순회하자
저장된 두 점수를 비교해서 큰 값을 builder에 추가하자
💡풀이
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
class Solution {
private int numberToPoint(int number) {
return switch(number) {
case 1 -> 3;
case 2 -> 2;
case 3 -> 1;
case 4 -> 0;
case 5 -> 1;
case 6 -> 2;
case 7 -> 3;
default -> -1;
};
}
public String solution(String[] survey, int[] choices) {
Map<Character, Integer> scoreMap = new HashMap<>();
for(int index = 0; index < survey.length; index++) {
int choice = choices[index];
if(choice == 4) {
continue;
}
char c = choice < 4 ? survey[index].charAt(0) : survey[index].charAt(1);
scoreMap.put(c, scoreMap.getOrDefault(c, 0) + numberToPoint(choice));
}
char[][] mbtis = {{'R', 'T'}, {'C', 'F'}, {'J', 'M'}, {'A', 'N'}};
StringBuilder sb = new StringBuilder();
for(char[] mbti : mbtis) {
int x = scoreMap.getOrDefault(mbti[0], 0);
int y = scoreMap.getOrDefault(mbti[1], 0);
if(x == y) {
Arrays.sort(mbti);
sb.append(mbti[0]);
} else {
char c = x > y ? mbti[0] : mbti[1];
sb.append(c);
}
}
return sb.toString();
}
}
📖새로 배운 부분
- 자바 switch 문은 대부분 O(1)로 빠르게 동작함
- 하지만 case가 복잡하거나 많으면 O(n)까지 느려질 수도 있음
- 숫자형 switch는 보통 더 빠르고, String도 효율적으로 처리함
GitHub - okjunghyeon/Programmers_CodingTest: 프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다.
프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다. Contribute to okjunghyeon/Programmers_CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스, Java] 바탕화면 정리 (0) | 2025.07.29 |
---|---|
[프로그래머스, Java] 신규 아이디 추천 (0) | 2025.07.29 |
[프로그래머스, Java][카카오 인턴] 키패드 누르기 (0) | 2025.07.21 |
[프로그래머스, Java][PCCE 기출문제] 10번 / 데이터 분석 (0) | 2025.07.21 |
[프로그래머스, Java] 크레인 인형뽑기 게임 (0) | 2025.07.21 |