일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Android
- androidstudio
- bitmap
- BOJ
- Canvas
- CS
- Database
- DBeaver
- DP
- Ecilpse
- Eclipse
- firebase
- git
- github
- GooglePlayServices
- gradle
- IDE
- IntelliJ
- java
- json
- kotlin
- level2
- linux
- mariadb
- MYSQL
- Paint
- permission
- python
- Sorting
- sourcetree
Archives
will come true
[프로그래머스 / Level1] 모의고사 (Java) 본문
728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/42840?language=java
핵심 키워드
- 완전 탐색
- 세 개의 값에서 최대값 구하기
풀이
- 수포자 3명 답안지 준비
수포자 3명의 답안지 패턴을 파악한 뒤, 각 패턴을 배열로 선언한다. - 채점
answers 배열의 요소와 수포자1, 2, 3 배열의 요소를 하나씩 비교해 답이 맞을 경우, 점수(정답을 맞힌 개수) 카운트 - 최고 점수(가장 많이 맞힌 개수) 구하기
Math.max() 함수를 사용해 수포자 3명의 점수 중 최대값을 구한다. - 점수가 최고점수와 같은 수포자 추출
위에서 구한 최고점수와 수포자 3명의 점수를 각각 비교했을 때, 점수가 같은 수포자는 리스트에 추가
(마지막 return값인 가장 많은 정답을 맞힌 사람은 배열길이가 가변적이기 때문에 리스트로 작업) - 최고 점수를 받은 수포자들 저장해둔 리스트를 배열로 변환해 반환
코드 (성공)
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int[] answers) {
//답안지
int[] student1 = { 1, 2, 3, 4, 5 };
int[] student2 = { 2, 1, 2, 3, 2, 4, 2, 5 };
int[] student3 = { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 };
int[] scores = new int[3];
//채점
for(int i = 0; i < answers.length; i++){
int answer = answers[i];
if(answer == student1[i % student1.length]){ scores[0]++; }
if(answer == student2[i % student2.length]){ scores[1]++; }
if(answer == student3[i % student3.length]){ scores[2]++; }
}
//최고 점수(가장 많이 맞힌 개수) 구하기
int topScore = Math.max(Math.max(scores[0], scores[1]), scores[2]);
//최고 점수인 수포자 구하기
List<Integer> students = new ArrayList<>();
for(int i=0; i < scores.length; i++){
if(topScore == scores[i]){
students.add(i+1);
}
}
//리스트 → 배열 변환
return students.stream().mapToInt(Integer::intValue).toArray();
}
}
학습 내용
- student1[0] = 1, student1[1] = 2, student1[2] = 3, student1[3] = 4, student1[4] = 5
student1[5] = 1, student1[6] = 2, student1[7] = 3 과 같이 특정 패턴이 반복되는 배열이 필요할 시 모든 값을 저장해 둘 필요없이 반복 구간의 값만 배열에 저장해둔 뒤 => int[] student1 = {1, 2, 3, 4, 5}
student1[i % student1.length] 와 같이 접근하려는 요소 인덱스 % 배열 길이의 나머지 값으로 접근한다.
ex) i = 10일 경우, student1[10 % 5 = 0] = student1[0] = 1
i = 11일 경우, student1[11 % 5 = 1] = student1[1] = 2
728x90
'Algorithm' 카테고리의 다른 글
[프로그래머스 / Level1] K번째 수 (Java) (0) | 2021.11.05 |
---|---|
[프로그래머스 / Level1] 완주하지 못한 선수 (Java) (0) | 2021.11.05 |
[프로그래머스 / Level1] 소수 만들기 (Java) (0) | 2021.11.05 |
[프로그래머스 / Level1] 폰켓몬 (Java) (0) | 2021.11.05 |
[프로그래머스 / 데모테스트] 나머지 한 점 (Java) (0) | 2021.11.04 |
Comments