https://school.programmers.co.kr/learn/courses/30/lessons/118666
문제 접근
좀 더 줄여서 풀 수 있는 방법이 있을건데 떠오르지 알아서 주먹구구식으로라도 풀었다.
최종 유형은 RT, CF, JM, AN 선택지 중 점수 높은 글자를 하나 씩 가져와서 붙이기에 각 선택지의 배열을 만들었다.
이후 survey 크기만큼 돌아가는 for문에서 survey의 배열 하나씩 검사한 뒤 RT일 때, TR일 때 등 그 때 마다의 점수를 계산하였다.
public String solution(String[] survey, int[] choices) {
String answer = "";
int[] RT = { 0, 0 };
int[] CF = { 0, 0 };
int[] JM = { 0, 0 };
int[] AN = { 0, 0 };
for (int i = 0; i < survey.length; i++) {
if (survey[i].equals("RT")) { // RT
if (choices[i] == 1)
RT[0] += 3;
else if (choices[i] == 2)
RT[0] += 2;
else if (choices[i] == 3)
RT[0] += 1;
else if (choices[i] == 5)
RT[1] += 1;
else if (choices[i] == 6)
RT[1] += 2;
else if (choices[i] == 7)
RT[1] += 3;
else
continue;
} else if (survey[i].equals("TR")) {
if (choices[i] == 1)
RT[1] += 3;
else if (choices[i] == 2)
RT[1] += 2;
else if (choices[i] == 3)
RT[1] += 1;
else if (choices[i] == 5)
RT[0] += 1;
else if (choices[i] == 6)
RT[0] += 2;
else if (choices[i] == 7)
RT[0] += 3;
else
continue;
} else if (survey[i].equals("CF")) { // CF
if (choices[i] == 1)
CF[0] += 3;
else if (choices[i] == 2)
CF[0] += 2;
else if (choices[i] == 3)
CF[0] += 1;
else if (choices[i] == 5)
CF[1] += 1;
else if (choices[i] == 6)
CF[1] += 2;
else if (choices[i] == 7)
CF[1] += 3;
else
continue;
} else if (survey[i].equals("FC")) {
if (choices[i] == 1)
CF[1] += 3;
else if (choices[i] == 2)
CF[1] += 2;
else if (choices[i] == 3)
CF[1] += 1;
else if (choices[i] == 5)
CF[0] += 1;
else if (choices[i] == 6)
CF[0] += 2;
else if (choices[i] == 7)
CF[0] += 3;
else
continue;
} else if (survey[i].equals("JM")) { // JM
if (choices[i] == 1)
JM[0] += 3;
else if (choices[i] == 2)
JM[0] += 2;
else if (choices[i] == 3)
JM[0] += 1;
else if (choices[i] == 5)
JM[1] += 1;
else if (choices[i] == 6)
JM[1] += 2;
else if (choices[i] == 7)
JM[1] += 3;
else
continue;
} else if (survey[i].equals("MJ")) {
if (choices[i] == 1)
JM[1] += 3;
else if (choices[i] == 2)
JM[1] += 2;
else if (choices[i] == 3)
JM[1] += 1;
else if (choices[i] == 5)
JM[0] += 1;
else if (choices[i] == 6)
JM[0] += 2;
else if (choices[i] == 7)
JM[0] += 3;
else
continue;
} else if (survey[i].equals("AN")) { // AN
if (choices[i] == 1)
AN[0] += 3;
else if (choices[i] == 2)
AN[0] += 2;
else if (choices[i] == 3)
AN[0] += 1;
else if (choices[i] == 5)
AN[1] += 1;
else if (choices[i] == 6)
AN[1] += 2;
else if (choices[i] == 7)
AN[1] += 3;
else
continue;
} else if (survey[i].equals("NA")) {
if (choices[i] == 1)
AN[1] += 3;
else if (choices[i] == 2)
AN[1] += 2;
else if (choices[i] == 3)
AN[1] += 1;
else if (choices[i] == 5)
AN[0] += 1;
else if (choices[i] == 6)
AN[0] += 2;
else if (choices[i] == 7)
AN[0] += 3;
else
continue;
}
}
if (RT[0] > RT[1])
answer += "R";
else if (RT[0] < RT[1])
answer += "T";
else
answer += "R";
if (CF[0] > CF[1])
answer += "C";
else if (CF[0] < CF[1])
answer += "F";
else
answer += "C";
if (JM[0] > JM[1])
answer += "J";
else if (JM[0] < JM[1])
answer += "M";
else
answer += "J";
if (AN[0] > AN[1])
answer += "A";
else if (AN[0] < AN[1])
answer += "N";
else
answer += "A";
return answer;
}
다른 사람 풀이
해석하는데 꽤 시간이 걸렸다.
public String solution(String[] survey, int[] choices) {
String answer = "";
char [][] type = {{'R', 'T'}, {'C', 'F'}, {'J', 'M'}, {'A', 'N'}};
int [] score = {0, 3, 2, 1, 0, 1, 2, 3};
HashMap<Character, Integer> point = new HashMap<Character, Integer>();
// 점수 기록할 배열 초기화
for (char[] t : type) { // t에 type[0] ~ type[3]가 순서대로 들어감
point.put(t[0], 0); // 배열로 인해 t[0]에는 type[0][0] ~ type[3][0]
point.put(t[1], 0); // t[1]에는 type[0][1] ~ type[3][1]이 들어가는데
// 해쉬맵에서 t[0], t[1] 키 값에 0을 저장
}
// 점수 기록
for (int idx = 0; idx < choices.length; idx++){
if(choices[idx] > 4){ // 4를 기준으로 유형의 순서가 바뀌니까
point.put(survey[idx].charAt(1), point.get(survey[idx].charAt(1)) + score[choices[idx]]); // 문자에 숫자 저장,
//처음엔 값이 저장되지 않아서 0이고 score[choices[idx]]씩 계속 더 해줌
// point hashmap 저장된 키의 값 가져오기
} else {
point.put(survey[idx].charAt(0), point.get(survey[idx].charAt(0)) + score[choices[idx]]);
}
}
// 지표 별 점수 비교 후 유형 기입
for (char[] t : type) {
System.out.println(point.get(t[1])); // hashmap으로 문자에 숫자를 저장해놨으니 값 비교해서 answer에 저장
answer += (point.get(t[1]) <= point.get(t[0])) ? t[0] : t[1];
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 둘만의 암호 / JAVA] (0) | 2023.02.07 |
---|---|
[프로그래머스 / 최소직사각형 / JAVA / 완전탐색] (0) | 2023.02.03 |
[프로그래머스 / 숫자 짝꿍 / JAVA] (0) | 2023.01.30 |
[프로그래머스 / 삼총사 / JAVA] (0) | 2023.01.27 |
[프로그래머스 / 옹알이(2) / JAVA] (0) | 2023.01.27 |
댓글