알고리즘/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는 앞 원소에 포인트를 올리는 부분인 것 같다.

 

 

 

아직도 어떤 게 잘 짠 코드인지 모르겠다. 할수록 모르겠는 코딩의 세계...