프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/42840)
자바 초급 문제의 모의고사 이다.
문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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, ...
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한 조건
-
시험은 최대 10,000 문제로 구성되어있습니다.
-
문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
-
가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
오랜 시간을 해매였다...예외처리를 접목해보고 싶어서..블록이 헷갈려서 구간구간 참 ..열심히 코드를 읽어가며 한 것같다.
시간은 3h정도 소모했다. 코드가 ...정`----말 길다. 개인적으로 줄여보고 싶은생각이 많이든다..나눗셈으로 접근해서 나머지로 움직였으면 어땟을까 싶은 생각이 많이든다..
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
package programmers_모의고사;
import java.util.*;
public class subClass2 {
public int[] solution(int[] answers) {
int[] answer = {};
// 찍는 방식의 배열을 반복, answer의 길이만큼 배열을 자르고 맞는 답이나오면 return에 추가시키면 된다.
int[] person1 = { 1, 2, 3, 4, 5 };// 1 2 3 4 5
int[] person2 = { 2, 1, 2, 3, 2, 4, 2, 5 };// 2 1 2 3 2 4 2 5
int[] person3 = { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 };// 33 11 22 44 55
// 가장 많이 맞춘 사람을 찾아서 그 순번을 리턴하라 , 여려명일 경우 오름차순으로 리턴하라.
int sum1 = 0;
int sum2 = 0;// 점수 합산 값, 맞을때마다 1점 추가.
int sum3 = 0;
// answers가 문제의 정답이 담긴 배열이다. 즉 배열의 비교가 필요하다.
int count = 0;
int count1 = 0;
int count2 = 0;
try {
for (int i = 0; i < answers.length; i++) {
if (answers[i] == person1[i]) {
sum1 += 1;
}
sum1 += 0;
if (answers[i] == person2[i]) {
sum2 += 1;
}
sum2 += 0;// <
if (answers[i] == person3[i]) {
sum3 += 1;
}
sum3 += 0;// <
}
} catch (ArrayIndexOutOfBoundsException e) {
int[] list1 = new int[answers.length];
sum1 = 0;// 길이는 정상적으로 출력됨
int[] list2 = new int[answers.length];
sum2 = 0;// <
int[] list3 = new int[answers.length];
sum3 = 0;// <
for (int j = 0; j < answers.length; j++) {// 다시 for문을 돌려서
if (count1 < person2.length) {// <
list2[j] = person2[count1];
count1++;
} else {
count1 = 0;
list2[j] = person2[count1];
count1++;// <
// continue;
}
if (list2[j] == answers[j]) {
sum2 += 1;
} // <
if (count2 < person3.length) {// <
list3[j] = person3[count2];
count2++;
} else {
count2 = 0;
list3[j] = person3[count2];
count2++;// <
// continue;
}
if (list3[j] == answers[j]) {
sum3 += 1;
} // <
if (count < person1.length) {
list1[j] = person1[count];
count++;
} else {
count = 0;
list1[j] = person1[count];
count++;// <
// continue;
}
if (list1[j] == answers[j]) {
sum1 += 1;
} // 여기까지 sum1 값 제대로 확인 함. 2,3 도 동일하게 받아줘야함
}
}
ArrayList<Integer> list = new ArrayList<>();
int maxScore = Math.max(sum1, (Math.max(sum2, sum3)));// 최댓값 확인 같아도 같은값나옴
if (maxScore == sum1) {
list.add(1);
}
if (maxScore == sum2) {
list.add(2);
}
if (maxScore == sum3) {
list.add(3);
}
answer = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
return answer;
}
}
|
cs |
'자바 초급문제로 맨땅에 해딩하기' 카테고리의 다른 글
자바 초급문제 13-3. 실패율 도전 3일차. (0) | 2020.04.13 |
---|---|
자바 초급문제 24. 문자열 내 마음대로 정렬하기 (0) | 2020.04.12 |
자바 초급문제 22. 평균구하기 (0) | 2020.04.11 |
자바 초급문제 21. 약수의 합 (0) | 2020.04.11 |
자바 초급문제 20. 문자열 내 p와 y의 개수 (0) | 2020.04.11 |