-
프로그래머스 - 성격 유형 검사하기Algorithm 2023. 5. 23. 15:18
문제
풀이
성격 유형의 디폴트 값을 'RCJA'로 지정해준다
각 성격유형 쌍을 이루는 배열 ['RT', 'CF', 'JM', 'AN'] 과 이 배열에 매칭되는 [0, 0, 0, 0] 배열을 선언해준다. 이 배열은 각 인덱스의 값이 음수일 경우 각각 [R, C, J, A] 양수일 경우 [T, F, M, N]을 표현한다
survey 배열을 순회하며 survey[i]에 매칭되는 choices[i]의 값이 4보다 클경우 즉, 동의를 선택한 경우와 비동의를 선택한 경우 두가지로 나눈다
이 때 survey[i]의 값이 typeArr에 존재하는 값이라면 즉, 정렬이 되어 있는 상태라면 survey[i]에 매칭되는 typeNum의 인덱스에 choices[i]-4 를 더해준다
반면 survey[i]의 값이 typeArr에 존재하지 않는 값 즉, 정렬이 되어 있지 않다면 survey[i]를 뒤집은 뒤 해당 값에 매칭되는 typeNum의 인덱스에 choices[i]-4 를 빼준다
마지막으로 typeNum를 순회하며 각 인덱스의 값이 양수라면 디폴트값을 변경해준다
function solution(survey, choices) { // 초기값 let answer = 'RCJA'; let typeArr = ['RT', 'CF', 'JM', 'AN']; let typeNum = [0, 0, 0, 0]; for(let i = 0; i < survey.length; i++){ // 동의를 선택한 경우 if(choices[i] > 4) { // survey의 값이 typeArr에 존재하는 값이라면 즉, 정렬된 경우 if(typeArr.includes(survey[i])) typeNum[typeArr.indexOf(survey[i])] += choices[i]-4; // 존재하지 않는다면 즉, 정렬되어 있지 않은 경우 else typeNum[typeArr.indexOf(survey[i].split('').reverse().join(''))] -= choices[i] - 4; } // 비동의를 선택한 경우 else { if(typeArr.includes(survey[i])) typeNum[typeArr.indexOf(survey[i])] += choices[i] - 4; else typeNum[typeArr.indexOf(survey[i].split('').reverse().join(''))] -= choices[i] - 4; } } // 각 인덱스 값이 양수라면 디폴트값 변경 for(let i = 0; i < typeNum.length; i++){ if(typeNum[i] > 0) answer = answer.replace(typeArr[i][0], typeArr[i][1]); } return answer; }
'Algorithm' 카테고리의 다른 글
프로그래머스 - 바탕화면 정리 (0) 2023.05.26 프로그래머스 - 폰켓몬 (0) 2023.05.25 프로그래머스 - 짝지어 제거하기 (0) 2023.05.21 프로그래머스 - [1차] 비밀지도 (0) 2023.05.20 프로그래머스 - 신규 아이디 추천 (0) 2023.05.15