자바 초급문제로 맨땅에 해딩하기

자바 초급문제 23. 모의고사

Jungsoomin :) 2020. 4. 12. 00:47

프로그래머스(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 = { 12345 };// 1 2 3 4 5
        int[] person2 = { 21232425 };// 2 1 2 3 2 4 2 5
        int[] person3 = { 3311224455 };// 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