문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/118666
[이 문제는 프로그래머스에서 푼 문제입니다.]
이 문제는 문제 조건을 구현하면 쉽게 풀 수 있습니다. 주어진 조건의 제약조건이 굉장히 작기 때문에 완전탐색으로 풀어도 시간 초과가 발생하지 않습니다. 전체적인 로직은 각 항목 데이터가 담긴 배열을 설정한 후 항목을 체크해서 앞의 문자열이 비동의, 뒤의 문자열이 동의로 체크해서 해당 값을 최신화해주시면 됩니다.
다음은 코드입니다.
class Solution {
static void setVal(int[] arr, char c, int val){
if(c == 'R') arr[0] -= val;
else if(c == 'T') arr[0] += val;
else if(c == 'C') arr[1] -= val;
else if(c == 'F') arr[1] += val;
else if(c == 'J') arr[2] -= val;
else if(c == 'M') arr[2] += val;
else if(c == 'A') arr[3] -= val;
else if(c == 'N') arr[3] += val;
}
public String solution(String[] survey, int[] choices) {
String answer = "";
// 설문조사 항목 배열 추가
// R/T : 0
// C/F : 1
// J/M : 2
// A/N : 3
int[] arr = new int[4];
// 설문조사 시작
for(int i=0;i<survey.length;i++){
// 항목 체크
char negative = survey[i].charAt(0);
char positive = survey[i].charAt(1);
// 점수 설정
int val = choices[i] - 4;
// 만약 값이 음수라면 negative값에 따라 추가
if(val<0) setVal(arr,negative,Math.abs(val));
// 만약 값이 양수라면 positive값에 따라 추가
else if(val>0) setVal(arr,positive,Math.abs(val));
}
// arr을 통해 answer 생성
if(arr[0]<=0) answer += 'R';
else if(arr[0]>0) answer += 'T';
if(arr[1]<=0) answer += 'C';
else if(arr[1]>0) answer += 'F';
if(arr[2]<=0) answer += 'J';
else if(arr[2]>0) answer += 'M';
if(arr[3]<=0) answer += 'A';
else if(arr[3]>0) answer += 'N';
return answer;
}
}