![[프로그래머스] 모의고사 - LV1](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEcrS3%2FbtsMNPX6PfQ%2F8flP9I7zPVA0H5FAJWBMwk%2Fimg.png)
[프로그래머스] 모의고사 - LV1프로그래머스/완전 탐색2025. 3. 17. 22:23
Table of Contents
📝 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42840
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[설명]
가장 먼저 해야할 일은 수포자들의 문제를 찍는 패턴을 분석
[접근 방법]
1. 수포자들의 패턴을 미리 배열에 저장. 특정 패턴이 있으면 배열에 미리 담아두자!
2. 수포자들의 패턴과 답안을 비교해서 일치하는 개수릊 저장하는 배열을 선언
3. 정답과 수포자들의 패턴을 비교해서 각 수포자들의 점수를 구한다. 정답 패턴의 길이가 수포자의 답안 길이보다 긴 경우, 정답 패턴의 처음 데이터와 다시 비교할 수 있도록 연산자 사용.
if (answers[i] == pattern[j][i % pattern[j].length])
4. 반복문에서 구한 각 수포자들의 점수 중 가장 큰 점수 찾기
class Solution {
public int[] solution(int[] answers) {
// 수포자들의 패턴을 미리 배열에 저장
int[][] pattern = {
{1, 2, 3, 4, 5},
{2, 1, 2, 3, 2, 4, 2, 5},
{3, 3, 1, 1, 2, 2, 4, 4, 5, 5}
};
// 수포자들의 점수를 저장할 배열
int[] scores = new int[3];
// 각 수포자의 패턴과 정답이 얼마나 일치하는지 확인
for (int i = 0; i < answers.length; i++) {
for (int j = 0; j < pattern.length; j++) {
if (answers[i] == pattern[j][i % pattern[j].length]) {
scores[j]++;
}
}
}
// 가장 높은 점수 저장 (scores 배열에서 제일 큰 점수를 maxScore에 저장)
//int maxScore = Arrays.stream(scores).max().getAsInt();
int maxScore = scores[0]; // 배열의 첫 번째 요소로 초기화
for (int i = 1; i < scores.length; i++) {
if (scores[i] > maxScore) {
maxScore = scores[i]; // 더 큰 값이 발견되면 maxScore 업데이트
}
}
// 가장 높은 점수를 가진 수포자들의 번호를 찾아서 리스트에 담음
ArrayList<Integer> answer = new ArrayList<>();
for (int i = 0; i < scores.length; i++) {
if (scores[i] == maxScore) {
answer.add(i + 1);
}
}
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
시간 복잡도 : O(N)
- 각 수포자들의 패턴과 정답을 비교하는 부분 : O(N)
- scores를 순회하면서 가장 높은 점수를 받는 수포자를 추가하는 연산 : O(N)
@킴준현 :: 차근차근 꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!