728x90
이해하기
일단 각각의 찍는 방식을 미리 만들어두고, 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 |