Загружаем каталог…
Загружаем каталог…
문제 : 모의고사 < 내가 생각한 풀이 > 목표 누가 가장 많은 문제를 맞혔는가? 수포자 1 분석 1번 수포자는 1 > 2 > 3 > 4 > 5 를 반복한다. 이 패턴을 배열 arr = [1, 2, 3, 4, 5] 로 두면, answers 의 인덱스 i 번 문제에 대한 답은 arr[i % 5] 이다. 주의 사항 문제는 1번부터 시작하므로, n번 문제의 인덱스는 n - 1 예시 30번 문제: 인덱스 29 -> 29 % 5 == 4 -> arr[4] = 5 48번 문제: 인덱스 47 -> 47 % 5 == 2 -> arr[2] = 3 66번 문제: 인덱스 65 -> 65 % 5 == 0 -> arr[0] = 1 수포자 2 분석 2번 수포자는 조금 특이해 보이지만, 2개씩 묶어 보면 규칙이 보인다. 2 1 | 2 3 | 2 4 | 2 5 | 2 1 | 2 3 | ... 짝수 인덱스 ( 0, 2, 4, ... ) -> answers 의 인덱스 i 번 문제에 대한 답은 항상 2 홀수 인덱스 ( 1, 3, 5, ... ) 1 > 3 > 4 > 5 를 반복한다. 이 패턴을 배열 arr = [1, 3, 4, 5] 로 두면, 홀수 인덱스 1, 3, 5, 7, ... 에서 1을 빼고 2로 나누면 0, 1, 2, 3, ... 이 된다. 이 번호로 arr 에서 순서대로 꺼내면 되므로, answers 의 인덱스 i 번 문제에 대한 답은 arr[((i - 1) / 2) % 4] 이다. 주의 사항 위에서 말한 짝수/홀수는 문제 번호가 아니라 인덱스 기준이다. 문제 번호는 1번부터 시작하므로, 문제 번호로 따지면 반대가 된다. 짝수 인덱스 ( 0, 2, 4, ... ) = 홀수번 문제 (1, 3, 5, ...) -> 항상 2 홀수 인덱스 ( 1, 3, 5, ... ) = 짝수번 문제 (2, 4, 6, ...) -> 1 > 3 > 4 > 5 반복 예시 30번 문제: 인덱스 29 -> ((29-1) / 2) % 4 == 2 -> odd[2] = 4 48번 문제: 인덱스 47 -> ((47-1) / 2) % 4 == 3 -> odd[3] = 5 66번 문제: 인덱스 65 -> ((65-1) / 2) % 4 == 0 -> odd[0] = 1 수포자 3 분석 3번 수포자도 조금 특이해 보이지만, 1번과 2번을 조금씩 섞은 듯한 규칙이 보인다. 3 3 | 1 1 | 2 2 | 4 4 | 5 5 | 3 3 | 1 1 | ... 2개씩 묶어서 보면 3 > 1 > 2 > 4 > 5 를 반복한다. 이 패턴을 배열 arr = [3, 1, 2, 4, 5] 로 두면, 인덱스 i 를 2로 나눈 몫( i / 2 )이 몇 번째 묶음인지를 나타내므로, answers 의 인덱스 i 번 문제에 대한 답은 arr[(i / 2) % 5] 이다. 예시 30번 문제: 인덱스 29 -> (29 / 2) % 5 == 4 -> arr[4] = 5 48번 문제: 인덱스 47 -> (47 / 2) % 5 == 3 -> arr[3] = 4 66번 문제: 인덱스 65 -> (65 / 2) % 5 == 2 -> arr[2] = 2 < 코드 > import java.util.*; class Solution { public int[] solution(int[] answers) { int a = 0, b = 0, c = 0; for (int i=0; i<answers.length; i++) { if (people1(i, answers[i])) a++; if (people2(i, answers[i])) b++; if (people3(i, answers[i])) c++; } int max = Math.max(a, Math.max(b, c)); int count = 0; if (a == max) count++; if (b == max) count++; if (c == max) count++; int[] answer = new int[count]; int index = 0; if (a == max) answer[index++] = 1; if (b == max) answer[index++] = 2; if (c == max) answer[index++] = 3; return answer; } public boolean people1(int num, int answer) { int[] arr1 = {1, 2, 3, 4, 5}; return arr1[num % arr1.length] == answer; } public boolean people2(int num, int answer) { int[] arr2 = {1, 3, 4, 5}; if (num % 2 == 0) return 2 == answer; else return arr2[((num - 1) / 2) % arr2.length] == answer; } public boolean people3(int num, int answer) { int[] arr3 = {3, 1, 2, 4, 5}; return arr3[(num / 2) % arr3.length] == answer; } } 코드 설명 people1 , people2 , people3 은 위에서 분석한 수포자 1, 2, 3의 규칙을 그대로 코드로 옮긴 함수로, 인덱스 i 번 문제에서 각 수포자의 답이 정답과 맞는지 확인한다. int max = Math.max(a, Math.max(b, c)); int count = 0; if (a == max) count++; if (b == max) count++; if (c == max) count++; int[] answer = new int[count]; int index = 0; if (a == max) answer[index++] = 1; if (b == max) answer[index++] = 2; if (c == max) answer[index++] = 3; return answer; 가장 많은 문제를 맞힌 사람의 번호를 담아 반환하는 부분이다. 세 명의 점수 중 최댓값 max 를 구한다. max 와 같은 점수를 받은 사람이 몇 명인지 세서, 그 크기만큼 배열을 만든다. 1번 → 2번 → 3번 순서로 확인하며 max 와 같은 사람의 번호를 담는다. 문제의 반환 조건을 보면 오름차순으로 정렬하라고 되어 있다. 하지만 수포자가 3명으로 고정되어 있으므로 따로 정렬할 필요 없이, 1, 2, 3번 순서대로 비교해서 담기만 하면 자연스럽게 오름차순이 된다.
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
[프로그래머스/JAVA] 모의고사. 문제 : 모의고사 목표 누가 가장 많은 문제를 맞혔는가? 수포자 1 분석 1번 수포자는 1 > 2 > 3 > 4 > 5 를 반복한다. 이 패턴을 배열 arr = [1, 2, 3, 4, 5] 로 두면, answers 의 인덱스 i 번 문제에 대한 답은 arr[i % 5] 이다. 주의 사항 문제는 1번부터 시작하므로, n번 문제의 인덱스는 n - 1 예시 30번 문제: 인덱스 29 -> 29 % 5 == 4 -> arr[4] = 5 48번 문제: 인덱스 47 -> 47 % 5 == 2 -> arr[2] = 3 66번 문제: 인덱스 65 -> 65 % 5 == 0 -> arr[0] = 1 수포자 2 분석 2번 수포자는 조금 특이해 보이지만, 2개씩 묶어 보면 규칙이 보인다.…
Открыть источник