문제 Lv.1 모의고사 (완전탐색)
1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
시험은 최대 10,000 문제로 구성
문제의 정답은 1, 2, 3, 4, 5중 하나
가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬
[알고리즘 선택 이유]
모든 문제의 정답유무를 모두 파악한다 -> 완전탐색
1) 정해진 패턴대로만 풀면 된다
: 어떤거는 풀고 어떤거는 찍는게 아니라 문제 전부 다 찍을 거기 때문에 정해진 패턴에 정답만 맞춰보면 끝
: %를 활용하면 인덱스를 반복할 수 있다
[함수 1] IntStream 이용하기
- int[], for 루프, 카운팅 등에서 더 깔끔하고 함수형 스타일로 데이터를 처리하고 싶을 때 사용
| IntStream 메서드 | 설명 |
| .range(start, end) | start부터 end-1까지의 int 스트림 생성 |
| .map() | 각 요소 변환 |
| .filter() | 조건에 맞는 요소만 추출 |
| .toArray() | int 배열로 변환 |
| .sum(), .max(), .min(), .average() |
통계 계산 |
[코드]
import java.util.*;
import java.util.stream.IntStream;
class Solution {
public int[] solution(int[] answers) {
int[] a = {1,2,3,4,5};
int[] b = {2,1,2,3,2,4,2,5};
int[] c = {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]==a[i%5]){
score[0]++;
}
if(answers[i]==b[i%8]){
score[1]++;
}
if(answers[i]==c[i%10]){
score[2]++;
}
}
int maxScore = Math.max(score[0],Math.max(score[1],score[2]));
return IntStream.range(0, 3)
.filter(i -> score[i] == maxScore)
.map(i -> i + 1)
.toArray();
}
}
[해설]
import java.util.*;
import java.util.stream.IntStream; stream 따로 선언해줘야한다
class Solution {
public int[] solution(int[] answers) {
int[] a = {1,2,3,4,5}; 1번 찍기 패턴
int[] b = {2,1,2,3,2,4,2,5}; 2번 찍기 패턴
int[] c = {3,3,1,1,2,2,4,4,5,5}; 3번 찍기 패턴
int[] score = new int[3]; 스코어 계산은 각각 하기
for(int i=0;i<answers.length;i++){
if(answers[i]==a[i%5]){ 5개 인덱스 계속 반복
score[0]++; 정답 카운트
}
if(answers[i]==b[i%8]){ 8개 인덱스 계속 반복
score[1]++; 정답 카운트
}
if(answers[i]==c[i%10]){ 10개 인덱스 계속 반복
score[2]++; 정답 카운트
}
}
int maxScore = Math.max(score[0],Math.max(score[1],score[2])); 가장 최고 점수 뽑기
return IntStream.range(0, 3) 범위
.filter(i -> score[i] == maxScore) 최고 점수면 출력
.map(i -> i + 1) 작은 인덱스 1부터 출력
.toArray(); 배열 출력
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/42840?language=java
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'Programmers > Lv.1' 카테고리의 다른 글
| [프로그래머스] Lv.1 대충 만든 자판 JAVA 풀이 (1) | 2025.03.06 |
|---|---|
| [프로그래머스] Lv.1 바탕화면 정리 JAVA 풀이 (0) | 2024.06.28 |
| [프로그래머스] Lv.1 공원 산책 JAVA 풀이 (0) | 2024.06.28 |
| [프로그래머스] Lv.1 크레인 인형뽑기 JAVA 풀이 (0) | 2023.10.02 |
| [프로그래머스] Lv.1 덧칠하기 JAVA 풀이 (0) | 2023.08.24 |