본문 바로가기
알고리즘

[프로그래머스/JAVA] 직업군 추천하기

by 상후 2021. 8. 28.
728x90
반응형

 

 

https://github.com/ROUTINE-STUDY/Algorithm

알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/84325

 

코딩테스트 연습 - 4주차

개발자가 사용하는 언어와 언어 선호도를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다. 아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수를 부

programmers.co.kr

문제 설명

출처 : 프로그래머스

 

풀이 방법
1. 언어의 선호도를 반환하는 메서드 생성
2. 반복문을 통해 직업군별 언어 각각 점수 계산하여 Map에 저장,  1에서 생성한 메서드 활용
3. 가장 높은 점수의 직업군을 반환하는 메서드 생성
내 코드(JAVA)

 

public class Solution {

    public String solution(String[]  table, String[] languages, int[] preference) {
        String answer = "";
        Map<String, Integer> map = new HashMap<>(); // 언어와 선호도 점수를 담는 맵

        // 한 row 씩 반복
        // 직업군     | 언어들
        // "SI       | JAVA       JAVASCRIPT SQL    PYTHON C#"
        // "CONTENTS | JAVASCRIPT JAVA       PYTHON SQL    C++"
        // "HARDWARE | C          C++        PYTHON JAVA   JAVASCRIPT"
        for(String row : table) {
            // String 형식의 row를 공백으로 나누어 배열에 저장
            String[] rowArr = row.split(" ");
            int score = 0;
            int checkScore = 5;
            map.put(rowArr[0], 0);  // map에 언어이름과 점수 초기값 세팅

            // 5점부터 각 직업군별 언어들을 계산
            for(int i=1; i<rowArr.length; i++) {
                String lang = rowArr[i];
                score += (checkScore-- * getPreference(languages, preference, lang));
            }
            // 계산된 값 저장
            map.put(rowArr[0], score);
        }

        answer = getHighJob(map);
        return answer;
    }

    // 언어의 선호도 점수를 가져오는 메서드
    public int getPreference(String[] languages, int[] preference, String findLang) {
        int findPreference = 0;

        for(int i=0; i<languages.length; i++) {
            if(languages[i].equals(findLang)) {
                findPreference = preference[i];
                break;
            }
        }
        return findPreference;
    }

    // 가장 높은 점수의 직업군을 반환하는 메서드
    public String getHighJob(Map<String, Integer> map) {
        Iterator iter = map.entrySet().iterator();
        String highJob = "";
        int max = 0;

        while(iter.hasNext()) {
            Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) iter.next();
            int totalScore = entry.getValue();

            if(max < totalScore) {
                max = totalScore;
                highJob = entry.getKey();
            } else if(max == totalScore){
                // 동일한 점수면 사전순
                String[] arr = {highJob, entry.getKey()};
                Arrays.sort(arr);
                highJob = arr[0];
            }
        }

        return highJob;
    }
}

 

리팩토링을 할 수 있는 부분이 많은 것 같다.

Collections 메서드를 활용하여 가독성을 높일 수도 있을 것 같다.

 

피드백 환영 !

 

 

 

 

 

 

728x90
반응형

댓글