알고리즘/프로그래머스 Level1

[프로그래머스,자바] Level1: 위클리챌린지 4주차 [직업군 추천하기]

류창 2021. 9. 1. 22:55
반응형

문제분석

문제 접근은 쉽지만 Level1치곤 구현난이도가 조금은 있는문제였다. 

 

3중반복문을 써야하기때문이다.  문제는, Languages와 Preference를 줄테니, 선호도와 직업군 언어점수의 랭크를 계산해서 Max값을 Return 하는문제다. Max값이 중복이면 사전순으로 빠른직업군으로 정렬해서 출력.

 

문제풀이

 

문제를 풀기전에.. 우선 3중 반복문을 써야할것 같은데 라는 생각은 했다.

 

하지만 이런 생각하기전에, 더 효율적으로 짤순없을까라는 생각을 한번은 더해보는것이 중요하다.

 

그렇게 10~20분정도 생각하고 내 생각으론 어떤방법으로도 3중반복문을 거쳐야할거같아서, 그대로 구현하기로 했다.

 

개인적으로 빨리 코드 구현도 중요하지만, 어떻게 코드를 효율적으로 코드를짤지 고민하는시간이 더 중요한거같다. 

결국엔 처음생각한 3중반복문

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.*;
class Solution {
    public String solution(String[] table, String[] languages, int[] preference) {
        String answer = "";
        
        int[] total = new int[table.length];
        int max=0;
        
        for(int i=0;i<languages.length;i++){
            for(int j=0;j<table.length;j++){
                String[] temp = table[j].split(" ");
                
                for(int k=1;k<temp.length;k++){
                   if(temp[k].equals(languages[i])){
                       total[j]+=preference[i]*(6-k);
                       break;
                   }
                }
                
                if(total[j]>max){
                    max=total[j];
                }
            }
        }
        
        List<String> list =new ArrayList<>();
        
        if(total[0]==max) list.add("SI");
        if(total[1]==max) list.add("CONTENTS");
        if(total[2]==max) list.add("HARDWARE");
        if(total[3]==max) list.add("PORTAL");
        if(total[4]==max) list.add("GAME");
        
        Collections.sort(list);
        
        return answer=list.get(0);
    }
}
cs

 

첫 반복으론 languages 순회

2번째 반복으로는 table순회,

3번째 반복으로는 table를 Split한 temp 배열 순회다.

 

문제를 보면, table입력에서 낱말 구분을 " "빈칸으로 하엿기때문에 Split(" ")을하여 구분해줬다.

구분한 배열 temp를 순회하는데, 0번째배열은 languages에 포함이안되니, 1번부터 탐색한다.

 

1번부터 탐색하는 3번째 반복안에선 total배열에 선호도와 언어점수의 곱을 더해준다.

 

2번째 반복문이 끝나기 전에, Max값을 갱신해준다. 이 Max값은 밑에서 쓰인다.

 

3중반복문이 끝낫다면

미리 갱신한 Max값을 total배열 0번 1번 2번 3번 4번에 비교하고,

인덱스의 값에 따라 언어를 집어넣는다.

 

복수의 언어가 있을걸 가정하고, sort()로 정렬한뒤, 맨 첫번째원소를 가져와 출력한다.

반응형