문제링크
문제요약
RT, CF, JM, AN 총 4 가지 지표가 있고, 1~7에 따라 각 지표의 점수가 부여된다.
1 ~ 7 은 각각 \[매우 비동의, 비동의, 약간, 보통, 약간, 동의, 매우] 이런식이다.
지표의 순서는 바뀔 수 있고, 앞에오는 것이 비동의에 해당하고, 뒤에오는 것이 동의에 해당한다.
예를 들어, RT, 2 가 들어오면, R이 2점 획득한다.
접근방법
Map을 만들어, 각각에 해당되는 유형들의 점수를 기록한다.
choice - 4 를 하게되면, 비동의에 해당되는 것들은 음수, 그 외는 양수가 된다.
따라서 만약 음수라면, survey의 첫번째 유형에 점수를 부여하고, 아니면 두번째 유형에 점수를 부여한다.
이렇게 하면 map에는 각 유형에 해당되는 점수들이 기록된다.
마지막으로 유형들을 유형순서, 알파벳 순서로 묶어놓은 배열을 2칸 씩 돌면서, 비교를 하고 answer에 추가한다.
코드
Java
import java.util.*;
class Solution {
public String solution(String[] survey, int[] choices) {
String answer = "";
Map<Character, Integer> map = new HashMap<>();
char[] category = {'R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'};
for (char c : category) {
map.put(c, 0);
}
for (int i = 0; i < survey.length; i++) {
recordScore(map, survey[i], choices[i]);
}
for (int i = 0; i < category.length; i += 2) {
answer += map.get(category[i]) >= map.get(category[i + 1]) ? category[i] : category[i + 1];
}
return answer;
}
private void recordScore(Map<Character, Integer> map, String survey, int choice) {
int score = choice - 4;
if (score == 0) return;
int i = Math.max(Integer.compare(score, 0), 0);
char c = survey.charAt(i);
map.put(c, map.get(c) + Math.abs(score));
}
}
'Algorithm Practice > Programmers' 카테고리의 다른 글
[Programmers] 크레인 인형뽑기 게임 (Java) (0) | 2023.09.27 |
---|---|
[Programmers] 하노이의 탑 (Java / Python) (0) | 2023.09.06 |
[Programmers] 멀쩡한 사각형 (Java) (0) | 2023.09.05 |
[Programmers] 거리두기 확인하기 (Java) (0) | 2023.09.05 |
[Programmers] 시소 짝궁 (Java) (0) | 2023.09.05 |