본문 바로가기
  • Jetpack 알아보기
프로그래머스 - JAVA/Level 1

[JAVA] 프로그래머스 Lv.1 : 모의고사

by 새우버거♬ 2021. 4. 4.

🔥 코딩 테스트 연습 > 완전 탐색

 

예제:

 

answers return
[1, 2, 3, 4, 5] [1]
[1, 3, 2, 4, 2] [1, 2, 3]

 

제한 조건:

  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

Solution #1

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution {
    public int[] solution(int[] answers) {
        int[] one = new int[]{1, 2, 3, 4, 5};
        int[] two = new int[]{2, 1, 2, 3, 2, 4, 2, 5};
        int[] three = new int[]{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};

        Person[] array = new Person[3];
        for (int i = 0; i < array.length; i++) {
            array[i] = new Person(i + 1, 0);
        }

        for (int i = 0; i < answers.length; i++) {
            if (answers[i] == one[i % 5]) array[0].count++;
            if (answers[i] == two[i % 8]) array[1].count++;
            if (answers[i] == three[i % 10]) array[2].count++;
        }

        int max = Math.max(array[0].count, Math.max(array[1].count, array[2].count));

        List<Integer> list = new ArrayList<>();
        for (Person p : array) {
            if (p.count == max) list.add(p.id);
        }

        int[] result = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }

        Arrays.sort(result);

        return result;

    }

    private class Person {
        int id;
        int count;

        public Person(int id, int count) {
            this.id = id;
            this.count = count;
        }
    }
}

 

Result #1


💡 수포자1, 수포자2, 수포자3과 answers 간의 index 규칙을 찾는다.

찍는 방식을 보면 수포자 1은 5번, 수포자 2는 8번, 수포자 3은 10번마다 한번씩 되돌아 온다.

그 뜻은 수포자 1은 one[0] 의 값으로 answers[0]answers[5], answers[10], ... , answers[i x 5] 의 문제를 찍었다는 것이 된다.

 

위와 같은 방법으로 for 반복문으로 수포자 1, 수포자 2, 수포자 3이 찍은 답이 answers 와 얼마나 일치하는 지 검사한다.

for (int i = 0; i < answers.length; i++) {
    if (answers[i] == one[i % 5]) count1++;
    if (answers[i] == two[i % 8]) count2++;
    if (answers[i] == three[i % 10]) count3++;
}

 

나는 Persion 이라는 객체를 생성해서 수포자 1, 2, 3을 나타내는 id 값과 각 count 값을 저장했다.

이제 저장한 값을 가지고, count가 최대인 수포자의 id를 정수형 배열로 리턴하면 된다.

 

 


 

More Algorithm!

 

👇👇

 

github.com/ggujangi/ggu.programmers

 

ggujangi/ggu.programmers

프로그래머스 알고리즘, JAVA. Contribute to ggujangi/ggu.programmers development by creating an account on GitHub.

github.com

 

 

 

출처 : 프로그래머스