Google 태그 관리자 아이콘

알고리즘 풀이

.programmers(모의고사)

silvergoni 2022. 4. 9. 08:42
반응형

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

 

1. 2022.04.09 시도

소요시간: 26분

import java.util.*;
class User {
    public int index;
    public int sum;
    
    User(int index, int sum) {
        this.index = index;
        this.sum = sum;
    }
    
    public String toString(){
        return index+":"+sum;
    }
}

class Solution {
    private int[] p1 = new int[]{1,2,3,4,5};
    private int[] p2 = new int[]{2, 1, 2, 3, 2, 4, 2, 5};
    private int[] p3 = new int[]{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
    
    public int[] solution(int[] answers) {
        User[] users = new User[3];
        users[0] = new User(1, 0);
        users[1] = new User(2, 0);
        users[2] = new User(3, 0);
        
        for (int i=0; i<answers.length; i++) {
            users[0].sum += (p1[i%p1.length] == answers[i]) ? 1 : 0;
            users[1].sum += (p2[i%p2.length] == answers[i]) ? 1 : 0;
            users[2].sum += (p3[i%p3.length] == answers[i]) ? 1 : 0;
        }
        
        Arrays.sort(users, (o1, o2)-> {
            if (o1.sum > o2.sum) {
                return -1;
            } else if (o1.sum < o2.sum) {
                return 1;
            }
            return 0;
        });
        
        Integer prev = null;
        int index = 0;
        for (int i=0; i<users.length; i++) {
            if (prev == null || prev == users[i].sum) {
                index++;
                prev=users[i].sum;
            }
        }
        
        int counter=0;
        int[] answer = new int[index];
        for (int i=0; i<index; i++) {
            answer[counter++]=users[i].index;
        }
        
        
        return answer;
    }
}

풀이 접근 과정

먼저 유저객체에 유저번호와 정답 수를 넣어준다.

그다음 정답 수기준으로 내림차순 정렬한다.

내림차순해서 제일 앞에가 가장 많은 정답이므로 같은 정답 갯수를 가진 유저의 인덱스의 마지막을 찾는다.

마지막 인덱스를 이용해 answer를 정리해서 리턴한다.

 

느낀점

  • 다른 풀이를 보니 MaxScore를 구해서 비교해주는게 더 깔끔하겠다.
import java.util.*;

class Solution {
    private int[] p1 = new int[]{1,2,3,4,5};
    private int[] p2 = new int[]{2, 1, 2, 3, 2, 4, 2, 5};
    private int[] p3 = new int[]{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
    
    public int[] solution(int[] answers) {
        int[] users = new int[3];
        
        for (int i=0; i<answers.length; i++) {
            users[0] += (p1[i%p1.length] == answers[i]) ? 1 : 0;
            users[1] += (p2[i%p2.length] == answers[i]) ? 1 : 0;
            users[2] += (p3[i%p3.length] == answers[i]) ? 1 : 0;
        }
        
        int max = Math.max(users[0], Math.max(users[1], users[2]));
        
        List<Integer> ret = new ArrayList<>();
        for (int i=0; i<users.length; i++) {
            if (users[i] == max) {
                ret.add (i+1);
            }
        }

        int counter=0;
        int[] answer = new int[ret.size()];
        for (int i=0; i<answer.length; i++) {
            answer[counter++]=ret.get(i);
        }
        
        return answer;
    }
}

알고리즘 정리노트: .leetcode(알고리즘 문제풀이 접근)

반응형

'알고리즘 풀이' 카테고리의 다른 글

.programmers(카펫)  (0) 2022.04.09
.programmers(소수 찾기)  (0) 2022.04.09
.programmers(H-Index)  (0) 2022.04.09
.programmers(가장 큰 수)  (0) 2022.04.09
.programmers(K번째수)  (0) 2022.04.08