Programmers-모의고사

dropKick·2020년 6월 29일
0

코딩테스트

목록 보기
2/17

JDK11 문제 풀이

  • 랜덤한 수열의 완전 탐색과 비교
  • 배열과 for loop를 통해 구현
  • 문제점
  1. answers의 모든 수를 수포자의 배열과 비교해야 하는데
    if(answers[i] == num1[i])를 통해 구현했더니 두 개의 테스트 케이스만 통과
    수열이 수포자 배열대로 들어왔을 때만 통과
  2. 세 가지 수의 비교와 카운트 인덱스 오름차순 정렬하기
    각 수의 비교는 1 >= 2, 1 >=3, 2 >= 3이 존재
    이들은 각 1, 2, 3 이라는 태그를 가지고 있어야 함
    어떻게 만들까?
  • 해결점
  1. 수포자 배열은 한번에 5, 8, 10개씩을 비교 이 비교를 수포자 배열 인덱스를 다시 0으로 만들어 반복했어야 함
    --> 원형 큐 방식을 사용, 인덱스 길이를 벗어나면 다시 0번 인덱스로 돌아옴
  2. 카운트 0번 기준으로 수를 비교, 가장 높은 수를 0번으로 변경
    List를 통해 최고값과 카운트 값이 같다면 최고값이므로 리스트에 삽입
    List를 통해 최고값들이 오름차순 정렬되어 있으므로 최고값에 맞는 태그를 담는 배열에 저장

해결 코드

class Solution {
    public int[] solution(int[] answers) {
        int[] answer = {};
        int[] temp = {0, 0, 0};
        int[] num1 = new int[]{1, 2, 3, 4, 5};
        int[] num2 = new int[]{2, 1, 2, 3, 2, 4, 2, 5};
        int[] num3 = new int[]{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        for(int i = 0; i < answers.length; i++) {
            if (answers[i] == num1[i%5]) {
                temp[0]++;
            }
            if (answers[i] == num2[i%8]) {
                temp[1]++;
            }
            if (answers[i] == num3[i%10]) {
                temp[2]++;
            }
        }
        
        int winner = temp[0];
        for (int value : temp) {
            if (winner < value) {
                winner = value;
            }
        }

        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < temp.length; i++) {
            if (winner == temp[i]) {
                list.add(i);
            }
        }
        answer = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i) + 1;
        }
        return answer;
    }

0개의 댓글