사기 자료구조 map을 썼다. key값으로 mbti의 요소를 넣고, value값으로 해당 요소의 점수를 넣어주는 식.
점수를 4점을 기준으로 빼준다. 이때 음수값이라면 map에 해당 지문의 왼쪽 mbti 요소로 넣어준다.(value값은 절대값을 취해야 하므로 -를 붙여줌) 양수라면 해당 지문의 오른쪽 mbti 요소로 넣어줌.
마지막으로 String을 붙여줄 땐 전에 배웠듯이 StringBuilder의 append() 메서드를 사용해줬다.
문자열 출력 방식은 문제에서 주어진 순서로!
풀이
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
// 맵으로 mbti 한개당 벨류 넣기
// 벨류 넣는 방법 4-choice의 절대값.
// 비교하는 ex) an, cf, rt중 큰걸 붙여주기
class Solution {
public String solution(String[] survey, int[] choices) {
String answer = "";
StringBuilder sb = new StringBuilder();
Map<Character, Integer> map = new HashMap<>();
// map 초기화
map.put('A',0);
map.put('N',0);
map.put('C',0);
map.put('F',0);
map.put('M',0);
map.put('J',0);
map.put('R',0);
map.put('T',0);
// mbti요소 별 벨류 할당
int score;
for(int i =0;i<choices.length;i++){
score = choices[i]-4;
if(score<0){
map.put(survey[i].charAt(0),map.get(survey[i].charAt(0)) -score);
}else if(score>0){
map.put(survey[i].charAt(1),map.get(survey[i].charAt(1)) +score);
}
}
// 맵 확인용 출력
for (Entry<Character, Integer> entrySet : map.entrySet()) {
System.out.println(entrySet.getKey() + " : " + entrySet.getValue()); }
// mbti 결과 출력 [AN/RT/CF/JM]
if(map.get('R')>=map.get('T')){
sb.append('R');
}else sb.append('T');
if(map.get('C')>=map.get('F')){
sb.append('C');
}else sb.append('F');
if(map.get('J')>=map.get('M')){
sb.append('J');
}else sb.append('M');
if(map.get('A')>=map.get('N')){
sb.append('A');
}else sb.append('N');
answer = sb.toString();
return answer;
}
}
'공부 > 예제 풀이' 카테고리의 다른 글
[프로그래머스] 개인정보 수집 유효기간 (1) | 2023.12.19 |
---|---|
[프로그래머스] 바탕화면 정리 (0) | 2023.12.19 |
[프로그래머스] 햄버거 만들기 (0) | 2023.12.19 |
약수의 갯수 구하기 (0) | 2023.11.30 |
백준 1475(실패) (0) | 2023.10.25 |