본문 바로가기
알고리즘/프로그래머스

프로그래머스 4주차 직업군 추천하기 자바 java

by 클로드 2021. 8. 25.
반응형

풀이

1. 직업군 언어 점수 문자열은 공백으로 위치가 정해져 있기 때문에 split 함수를 이용해서 배열로 만들어냅니다.

2. 직업군 언어 배열(table을 split 한 배열)과 개발자 언어 선호도 배열 (languages, preference 배열)은 문자열임으로 equals 함수를 이용해서 비교합니다

3. 점수가 같을 경우 사전순으로 가장 빠른 직업군을 return이라는 조건이 있음으로 compareTo 함수를 이용해서 문자열을 사전순으로 비교합니다.

 

"SI".compareTo("PORTAL") -> 3

SI 문자열은 PORTAL 문자열보다 사전순으로 뒤에 있으므로 양수

 

"PORTAL".compareTo("SI") -> -3

PORTAL 문자열은 SI 문자열보다 사전순으로 앞에 있으므로 음수

 

코드

class Solution {
    public String solution(String[] table, String[] languages, int[] preference) {
        int max = 0;
        String maxJob = "";

        for (int i = 0; i < table.length; i++) {
            String jobLang[] = table[i].split(" ");
            String job = "";
            int sum = 0;

            for (int j = 0; j < jobLang.length; j++) {
                int score = jobLang.length - j;

                //0번째 직업군 이름
                if (j == 0) {
                    job = jobLang[j];
                    continue;
                }

                //직업군 언어와 개발자언어가 같은 경우 점수 계산
                for (int k = 0; k < languages.length; k++) {
                    if (languages[k].equals(jobLang[j])) {
                        sum += preference[k] * score;
                    }
                }
            }

            //점수가 가장 크거나 같을때
            if (max <= sum) {
                //점수가 같으면 사전순으로 비교 (음수일 경우 사전순으로 더 빠르기 때문에 스킵)
                if (max == sum) {
                    if (maxJob.compareTo(job) < 0) {
                        continue;
                    }
                }

                max = sum;
                maxJob = job;
            }
        }

        //System.out.println(maxJob + " : " + max);

        return maxJob;
    }
}

 

출처

https://programmers.co.kr/learn/courses/30/lessons/84325

반응형

댓글