프로그래머스 코딩테스트 문제풀이 “모의고사” 링크 : 여기를 클릭해 주세요.

프로그래머스 코딩테스트 JAVA 레벨 1에 있는 ‘모의고사’ 문제입니다.
코딩테스트 [모의고사] 문제 이해하기
수포자 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를 반복해서 정답을 제출한다고 합니다.
문제의 정답들을 받아서 가장 많이 맞추는 사람을 return 해주는 문제인데요.
시험은 최대 10,000문제로 구성되어 있다고합니다.
그말은 시험이 몇문제인지 알 수 없기때문에 저희는 수포자들의
정답을 계속 반복시켜야 한다는것을 알 수 있습니다.
또한 정답을 배열로 받아서 배열로 가장 많이 맞춘 수포자를 리턴해줘야합니다.
(높은 점수를 사람이 여럿일 경우 오름차순으로 정렬도 하라고합니다.)
그렇다면 기본적인 Class를 생성하고 하나씩 풀어가보도록 하겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class Solution {
public static int[] solution(int[] answers) {
//수포자들을 각각 a,b,c로 선언하고
//그들이 적을 답들을 배열로 넣었습니다.
int[] a = {1,2,3,4,5};
int[] b = {2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5};
int[] c = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
//각각의 수포자들의 점수를 세어주기위해 각각 변수도 선언합니다.
int acnt = 0;
int bcnt = 0;
int ccnt = 0;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
|
for(int i=0; i<answers.length; i++) {
if(answers[i%answers.length] == a[i%a.length]) {
acnt++;
}
if(answers[i%answers.length] == b[i%b.length]) {
bcnt++;
}
if(answers[i%answers.length] == c[i%c.length]) {
ccnt++;
}
}
|
이렇게 각각의 수포자들이 적을 정답들을 실제 answers의 길이만큼 반복시킵니다. 그리고 정답들이 맞을때마다 각수포자들의 cnt를 1씩 늘려줍니다.
여기까지 했다면 각각의 수포자들이 몇개를 맞췄는지 알 수 있습니다.
이제 그 들중 가장 많이 맞춘 사람을 찾아 내면 될 것 같습니다.
1
|
이렇게 가장 많이 맞춘사람의 갯수를 max라는 변수에 담아준 뒤,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
List<Integer> preAns = new ArrayList<Integer>();
if(max == acnt) {
preAns.add(1);
}
if(max == bcnt) {
preAns.add(2);
}
if(max == ccnt) {
preAns.add(3);
}
answer[i] = preAns.get(i);
}
|
ArrayList를 만들어 준 뒤, 각각의 cnt들을 max와 비교해 주고 list에 넣어줍니다.
마지막으로 저희는 배열로 정답을 return 해줘야하기때문에
list에 넣은 값들을 배열 answer에 넣어주면 끝이 납니다.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
public class Solution {
@Test
public void test() {
assertArrayEquals(Solution.solution(new int[] {1,2,3,4,5}), new int[] {1});
assertArrayEquals(Solution.solution(new int[] {1,3,2,4,2}), new int[] {1,2,3});
}
public static int[] solution(int[] answers) {
int[] a = {1,2,3,4,5};
int[] b = {2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5};
int[] c = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int acnt = 0;
int bcnt = 0;
int ccnt = 0;
for(int i=0; i<answers.length; i++) {
if(answers[i%answers.length] == a[i%a.length]) {
acnt++;
}
if(answers[i%answers.length] == b[i%b.length]) {
bcnt++;
}
if(answers[i%answers.length] == c[i%c.length]) {
ccnt++;
}
}
List<Integer> preAns = new ArrayList<Integer>();
if(max == acnt) {
preAns.add(1);
}
if(max == bcnt) {
preAns.add(2);
}
if(max == ccnt) {
preAns.add(3);
}
answer[i] = preAns.get(i);
}
return answer;
}
}
|
'알고리즘' 카테고리의 다른 글
[자바예제] 프로그래머스 코딩테스트 나누어떨어지는숫자배열 풀이 (0) | 2020.08.27 |
---|---|
[자바예제] 프로그래머스 코딩테스트 같은숫자는싫어 풀이 (0) | 2020.08.27 |
[자바예제] 프로그래머스 코딩테스트 가운데글자가져오기 풀기 (0) | 2020.08.27 |
[자바예제] 프로그래머스 코딩테스트 2016년문제 풀기 (0) | 2020.08.27 |
[자바예제] 완주하지 못한 선수 (0) | 2020.08.27 |