알고리즘/Java
[프로그래머스] JAVA - 성격 유형 검사하기
조이은
2023. 2. 17. 16:26
https://school.programmers.co.kr/learn/courses/30/lessons/118666
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
" Lv 1. 성격 유형 검사하기"
문제
요약.. 은 너무 길어서 생략..
접근 방식
survey 원소를 split하여, 4보다 큰 choice가 나온다면 뒤 원소에 점수 +
4보다 작은 choice가 나온다면 앞 원소에 점수 +
코드
public static String Study(String[] survey, int[] choices) {
String answer = "";
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
HashMap<String, Integer> mbti = new HashMap<>();
String[] list = {"R", "T", "C" ,"F", "J", "M", "A", "N"};
for(int i=0; i<list.length; i++) {
mbti.put(list[i], 0);
}
for(int i=0; i<survey.length; i++) {
String[] temp = survey[i].split("");
if(choices[i]>4) {
mbti.put(temp[1], mbti.get(temp[1])+choices[i]-4);
}
else if(choices[i]<4) {
mbti.put(temp[0], mbti.get(temp[0])+ 4 - choices[i]);
}
}
if(mbti.get("R")>=mbti.get("T")) {
answer = "R";
}
else if(mbti.get("R")<mbti.get("T")){
answer = "T";
}
if(mbti.get("C")>=mbti.get("F")) {
answer = answer.concat("C");
}
else {
answer = answer.concat("F");
}
if(mbti.get("J")>=mbti.get("M")){
answer = answer.concat("J");
}
else {
answer = answer.concat("M");
}
if(mbti.get("A")>=mbti.get("N")) {
answer = answer.concat("A");
}
else {
answer = answer.concat("N");
}
System.out.println(answer);
return answer;
}
고찰
검사 끝난 후에, answer concat 하는 부분은 for문을 돌릴까 하다가.. if 문을 쓰면 굳이 반복문 안 해도 되지 않나! 싶어서 저런 식으로 코드를 짜보았는데 코드가 더러워보이긴 한다. for문을 돌리는 법도 고민해보면 좋을 것 같다.
중요한 포인트는 split하여서 4보다 큰 choice는 뒤 원소, 4보다 작은 choice는 앞 원소에 포인트를 올리는 부분인 것 같다.
아직도 어떤 게 잘 짠 코드인지 모르겠다. 할수록 모르겠는 코딩의 세계...