🧩 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42840
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 내가 작성한 코드
import java.util.*;
class Solution {
public int[] solution(int[] answers) {
int[] number1 = {1, 2, 3, 4, 5};
int[] number2 = {2, 1, 2, 3, 2, 4, 2, 5};
int[] number3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int[] score = new int[3];
for (int i = 0; i < answers.length; i++) {
if(answers[i] == number1[i % number1.length]) score[0]++;
if(answers[i] == number2[i % number2.length]) score[1]++;
if(answers[i] == number3[i % number3.length]) score[2]++;
}
int max = Math.max(score[0], Math.max(score[1], score[2]));
List<Integer> answer = new ArrayList<>();
for (int i = 0; i < score.length; i++) {
if (max == score[i]) answer.add(i+1);
}
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
- 답안 패턴 배열 생성
- 각 수포자들의 답안 패턴을 배열로 생성
- 점수 배열 선언
- 각 수포자들의 점수를 담을 길이가 3인 `score[]` 배열 선언
- 정답 비교 및 점수 계산
- for문을 통해 주어진 답안(`answers[]`)과 각 수포자들의 패턴을 비교하여 정답이 맞을 경우 score 증가
- 이 과정에서 배열 인덱스 초과 문제를 해결하기 위해 나머지 연산자를 사용 ⭐️
- 최대 점수 추출 및 결과 반환
- 점수 배열에서 가장 큰 값을 찾고, 해당 점수를 가진 수포자를 리스트에 추가한 후
- 문제의 최종 return 값이 `int[]`형이기 때문에 `List<Integer>`를 `int`형으로 변환한 후 반환
🧠 배운 점
- 처음에 `answers[]` 배열과 각 수포자들의 답안 패턴 배열을 비교할 때
for (int i = 0; i < answers.length; i++) {
if(answers[i] == number1[i]) score[0]++;
if(answers[i] == number2[i]) score[1]++;
if(answers[i] == number3[i]) score[2]++;
}
위의 코드와 같이 작성하였고, 인덱스 초과 오류를 생각하지 않고 반복문을 생성하여 런타임 에러가 발생하였다.
- number1, number2, number3 배열의 길이가 모두 다르고, answers 배열의 길이가 3개 배열들의 길이보다 길게 되면 인덱스 초과 오류 발생
- 주어진 배열 길이 안에서만 for문 반복문을 돌리려면 배열의 길이를 초과하지 않도록 인덱스를 조정해야 했다.
- 각 number 배열의 길이를 구하고, `i % number.length`와 같이 나머지 연산자를 사용하여 인덱스가 배열의 길이를 초과하지 않게 조정
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 자바(Java) - 구명보트 (0) | 2024.06.06 |
---|---|
[프로그래머스] 자바(Java) - 과일 장수 (0) | 2024.06.01 |
[프로그래머스] 자바(Java) - 폰켓몬 (0) | 2024.05.23 |
[프로그래머스] 자바(Java) - 2016년 (0) | 2024.05.18 |
[프로그래머스] 자바(Java) - 카드 뭉치 (0) | 2024.05.17 |