https://school.programmers.co.kr/learn/courses/30/lessons/42840
<아이디어>
우선 삼인방의 답이 반복되니 반복되는 구간을 1차원 배열에 지정했다.
값으로 들어온 정답 배열과 비교해서 각 삼인방의 정답개수를 저장해둔다.
정답개수를 탐색하며 최댓값(동점 포함)을 구한다.
이 최댓값을 가진 사람의 번호를 저장해 리턴한다.
<문제>
처음에 제출하고 런타임에러가 엄청 났는데, 알고보니...
삼인방 정답을 확인할 때, 단순히 p1[i] 형식으로 비교하고 있었다..
각 삼인방의 배열의 크기가 지정되어 있기에 들어오는 answers 배열의 크기에 따라 범위를 벗어날 수 있다
따라서 i%삼인방배열 크기 로 지정해주었다. (각 삼인방 배열의 크기를 넘어가면 다시 [0~삼인방 배열 크기]로 돌아가도록)
<제출코드>
import java.util.*;
class Solution {
public int[] solution(int[] answers) {
int[] answer = {};
int len = answers.length;
int maxS = Integer.MIN_VALUE;
int[] p1 = {1, 2, 3, 4, 5};
int[] p2 = {2, 1, 2, 3, 2, 4, 2, 5};
int[] p3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int[] sol = new int[3];
for(int i=0; i<len; i++){
// 삼인방 정답 확인
if(answers[i] == p1[i%5]) sol[0] += 1;
if(answers[i] == p2[i%8]) sol[1] += 1;
if(answers[i] == p3[i%10]) sol[2] += 1;
}
int cnt = 1;
for(int i=0; i<3; i++){
// 고득점자 확인
if(maxS == sol[i]) cnt++;
maxS = Math.max(maxS, sol[i]);
}
answer = new int[cnt];
int idx = 0;
for(int i=0; i<3; i++){
if(sol[i] == maxS) answer[idx++] = i + 1;
}
return answer;
}
}
'코테 > 프로그래머스' 카테고리의 다른 글
99클럽 코테 스터디 22일차 TIL 완전탐색(피로도) (0) | 2024.11.18 |
---|---|
99클럽 코테 스터디 21일차 TIL 완전탐색(카펫) (0) | 2024.11.17 |
[프로그래머스] 301649 대장균의 크기에 따라 분류하기 2 (MySQL) (1) | 2024.11.06 |
99클럽 코테 스터디 7일차 TIL DFS(모음사전) (0) | 2024.11.03 |
[프로그래머스] 284531 노선별 평균 역 사이 거리 조회하기 (MySQL) (0) | 2024.11.03 |