본문 바로가기
JAVA/Coding Test Study

[Lv.1] 모의고사 : Java

by ♡˖GYURI˖♡ 2024. 4. 1.
728x90
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이해하기

일단 각각의 찍는 방식을 미리 만들어두고, answer와 비교해야겠다고 생각하였다.

예시에서는 answer가 5자리밖에 없어서 비교하기 쉽지만, 5자리가 넘어가게 되면 찍는 방식의 처음으로 되돌아와야 한다는 점이 고민되었다.

그래서 처음에는 찍는 방식 배열의 인덱스를 answers.length로 나머지 계산하도록 만들었지만 요 방법이 틀렸다는 것을 나중에 알게 되었다.

처음 풀었던 코드는 아래와 같았다.

import java.util.*;

class Solution {
    int[] no1 = {1, 2, 3, 4, 5};
    int[] no2 = {2, 1, 2, 3, 2, 4, 2, 5};
    int[] no3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};

    public int[] solution(int[] answers) {
        List<Integer> list = new ArrayList<>();
        int[] count = new int[3];

        for (int i = 0; i < answers.length; i++) {
            if (answers[i] == no1[i % answers.length]) {
                count[0]++;
            }
            if (answers[i] == no2[i % answers.length]) {
                count[1]++;
            }
            if (answers[i] == no3[i % answers.length]) {
                count[2]++;
            }
        }

        int max = Arrays.stream(count).max().getAsInt();

        for (int i = 0; i < count.length; i++) {
            if (count[i] == max) {
                list.add(i + 1);
            }
        }

        return list.stream().mapToInt(i -> i).toArray();
    }
}

 

 

문제풀이

import java.util.*;

class Solution {
    int[] no1 = {1, 2, 3, 4, 5};
    int[] no2 = {2, 1, 2, 3, 2, 4, 2, 5};
    int[] no3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};

    public int[] solution(int[] answers) {
        List<Integer> list = new ArrayList<>();
        int[] count = new int[3];

        for (int i = 0; i < answers.length; i++) {
            if (answers[i] == no1[i % no1.length]) {
                count[0]++;
            }
            if (answers[i] == no2[i % no2.length]) {
                count[1]++;
            }
            if (answers[i] == no3[i % no3.length]) {
                count[2]++;
            }
        }

        int max = Arrays.stream(count).max().getAsInt();

        for (int i = 0; i < count.length; i++) {
            if (count[i] == max) {
                list.add(i + 1);
            }
        }

        return list.stream().mapToInt(i -> i).toArray();
    }
}

 

이게 고친 코드인데 딱 한 부분만 바뀌었다!

바로 answers.length로 나누는 것이 아닌 찍는 방식 배열의 길이로 나머지 계산을 해주는 것이다!

이렇게 나머지 계산을 해주면 배열의 길이를 넘어가면 자동으로 다시 앞으로 돌아가게 된다.

 

 

'JAVA > Coding Test Study' 카테고리의 다른 글

[Lv.2] 소수 찾기 : Java  (0) 2024.04.02
[Lv.1] 키패드 누르기 : Java  (0) 2024.04.02
[Lv.1] 소수 찾기 : Java  (0) 2024.04.01
[Lv.2] 카펫 : Java  (0) 2024.04.01
[Lv.3] 여행경로 : Java  (0) 2024.03.27