(프로그래머스/자바) 모의고사

Kim Jin Hyeok·2020년 11월 20일
0

코딩테스트 연습

목록 보기
3/8
문제 설명

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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하는 값을 오름차순 정렬해주세요.
입출력 예
answers return
[1,2,3,4,5] [1]
[1,3,2,4,2] [1,2,3]
입출력 예 설명

입출력 예 #1

  • 수포자 1은 모든 문제를 맞혔습니다.
  • 수포자 2는 모든 문제를 틀렸습니다.
  • 수포자 3은 모든 문제를 틀렸습니다.

따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.

입출력 예 #2

  • 모든 사람이 2문제씩을 맞췄습니다.

나의 코드

class Solution {
  public int[] solution(int[] answers) {
      int score1=0, score2=0, score3=0; //1,2,3번의 점수
      Integer[] pattern1arr = {1, 2, 3, 4, 5}; //패턴
      Integer[] pattern2arr = {2, 1, 2, 3, 2, 4, 2, 5};
      Integer[] pattern3arr = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
      ArrayList<Integer> pattern1 = new ArrayList<>(Arrays.asList(pattern1arr)); //반복자 사용을 위해 패턴 배열을 배열 리스트로 변환
      ArrayList<Integer> pattern2 = new ArrayList<>(Arrays.asList(pattern2arr));
      ArrayList<Integer> pattern3 = new ArrayList<>(Arrays.asList(pattern3arr));
      Iterator itr1 = pattern1.iterator(); //반복자 선언
      Iterator itr2 = pattern2.iterator();
      Iterator itr3 = pattern3.iterator();
      for(int i=0; i<answers.length; i++) { //문제 정답 배열 탐색
          int answer = answers[i]; //거듭 배열 참조하는 것을 막기 위해 현재 정답 변수 할당
          if (!itr1.hasNext()) { //패턴이 반복하도록, 패턴 끝이 오면 다시 초기화하여 처음으로 이동
            itr1 = pattern1.iterator();
          }
          if((int)itr1.next() == answer) {
            score1++;
          }

          if (!itr2.hasNext()) {
            itr2 = pattern2.iterator();
          }
          if((int)itr2.next() == answer) {
            score2++;
          }

          if (!itr3.hasNext()) {
            itr3 = pattern3.iterator();
          }
          if((int)itr3.next() == answer) {
            score3++;
          }
      }
      if(score1 > score2) { //모든 경우의 수를 if로 구현
        if(score1 > score3) {
          int[] answer = {1};
          return answer;
        } else if(score1 < score3) {
          int[] answer = {3};
          return answer;
        } else {
          int[] answer = {1, 3};
          return answer;
        }
      } else if(score1 < score2) {
        if(score2 > score3) {
          int[] answer = {2};
          return answer;
        } else if(score2 < score3) {
          int[] answer = {3};
          return answer;
        } else {
          int[] answer = {2, 3};
          return answer;
        }
      } else {
        if(score1 > score3) {
          int[] answer = {1, 2};
          return answer;
        } else if(score1 < score3) {
          int[] answer = {3};
          return answer;
        } else {
          int[] answer = {1, 2, 3};
          return answer;
        }
      }
  }
}

잘 되긴 하는데
너무 무식하게 구현해서 부끄러운 코드다..

0개의 댓글