문제분석: 1번, 2번 3번 수포자의 찍는 규칙을 살펴보자
1번 : 1 2 3 4 5 반복
2번: 2 1 2 3 2 4 2 5 반복
3번: 3 3 1 1 2 2 4 4 5 5 반복
(물론, 2번을 더 심도있게 파악하면 홀수는 2로 고정이고, 짝수는 2를제외해 1 3 4 5순 반복인데
규칙이 짧고 일정하게 반복을하기에, 반복하는 숫자열을 사용하는것이 더 심플하다.
만약 찍는 규칙이 반복하지않고 길다면, 후자의 방식을 택해야한다.)
시험정답을 입력받아서, 제일 점수가 높은 사람을 return하고, 동점자가 있으면 모두 return해야한다.(이때, 오름차순)
문제풀이:
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
|
import java.util.ArrayList;
class Solution {
public int[] solution(int[] answer) {
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<answer.length; i++) {
if(answer[i] == a[i%a.length]) {score[0]++;}
if(answer[i] == b[i%b.length]) {score[1]++;}
if(answer[i] == c[i%c.length]) {score[2]++;}
}
int maxScore = Math.max(score[0], Math.max(score[1], score[2]));
ArrayList<Integer> list = new ArrayList<>();
if(maxScore == score[0]) {list.add(1);}
if(maxScore == score[1]) {list.add(2);}
if(maxScore == score[2]) {list.add(3);}
int[] result = new int[list.size()];
for(int i=0;i<list.size();i++){
result[i]=list.get(i);
}
return result;
}
}
|
cs |
4~6: a,b,c의 규칙을 배열로 담았다.
7: 정답을 채점할 배열 :크기는 3 (수험자가 3명이기때문)
8~12: 시험문제를 순회하는 i에 대하여, i%a.length는 각각 수험자가 i번째에대해 찍을 숫자의 위치값을나타낸다.
이 위치값에 해당대는 int a~c[]배열이 문제정답인 answer[i] 가 같으면 score가 오르게 코딩
13: Math.max를 사용해 최고점수를 선언,초기화
14~17: List를 생성하여, 최고점수가 맞으면 list에 넣는다.
//List를 생성한 이유: 최고점수인원이 정확한 인원수 가정해져있다면 , 생성하지않고 int[]에 바로 값을넣지만,
인원수가 1~3명으로 변하기때문에 List에 값을넣고 int[]로 변환한다.
여기서 Scroe[0], Score[1] , Score[2] 순으로 if문에 작성되어서 자동적으로 오름차순 정리가 된다.
만약 문제가 내림차순이엿다면 반대로 Score[2] 부터 작성하면된다.
19~25: 문제의 리턴값이 int[]다. List를 순회하여 int[]에 넣고 리턴한다.
// 물론 return list.stream().mapToInt(i->i).toArray(); 같이 1줄로 람다형식으로 짧고 가독성있게 바꿀수있다.
설명하자면, list.stream() //리스트에대해 스트림(흐름) 생성
.mapToInt(i->i) // 그 스트림에있는 원소를 조건에맞게 바꾸고 IntStream반환
.toArray() // IntStream 의 toArray()메소드를통해 int배열 리턴
'알고리즘 > 프로그래머스 Level1' 카테고리의 다른 글
[프로그래머스,Java] Level1 : 완주하지 못한 선수 (0) | 2021.08.04 |
---|---|
[프로그래머스,Java] Level1 : 폰켓몬 (0) | 2021.08.04 |
[프로그래머스,Java] Level1 신규 아이디 추천 (0) | 2021.08.03 |
[프로그래머스,Java] Level1 : 로또의 최고 순위와 최저 순 (0) | 2021.07.30 |
[프로그래머스,Java] Level1 : 소수 만들기 (0) | 2021.07.29 |