모의고사

김나영·2023년 6월 19일
0

프로그래머스

목록 보기
18/39

문제 : 모의고사

풀이

int[] count = new int[]{0,0,0}; // 각 사람의 정답 횟수 배열
int[] human1 = new int[]{1, 2, 3, 4, 5}; //5 human1.length
int[] human2 = new int[]{2, 1, 2, 3, 2, 4, 2, 5};//8 human2.length
int[] human3 = new int[]{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};//10 human3.length
  • 각 사람의 정답 횟수 배열을 생성

  • 1번 수포자는 1~5를 순서대로 반복(human1)

  • 2번 수포자는 2를 제외한 1~5를 순서대로 반복(human2)

  • 3번 수포자는 3-1-2-4-5 순서로 2번씩 반복(human1)

  • 반복되는 최소 단위를 배열로 만듦

int[][] human = {human1, human2, human3}; //이차원 배열 만들기
int j = 0;
for(int[] hNum : human){
   for (int i= 0; i < answers.length; i++) { //
      if(hNum[i % human[j].length] == answers[i]) {
          count[j]++;
      }
   }
      j++;
}
  • answer의 길이만큼 for문을 돌며 수포자들의 정답과 비교

  • 반복마디의 길이만큼 나머지를 구해서 답을 비교

  • 맞으면 count 증가

  • 0번째 % 5-> 1(0번째 인덱스), 1번째 -> 2(1), 2번째 -> 3, 3번째 -> 4, 4번째-> 5,

  • 5번째 % 5-> 1(0), 6번째 -> 2(1)

 ArrayList <Integer> ls = new ArrayList<>();
// max값 찾기
int max = 0;
for (int i = 0; i < count.length; i++) {
   if(max < count[i]){
      max = count[i];
   }
}
  • 최대 점수를 가진 수포자 리스트를 생성하기 위해 ArrayList 사용

  • max 값을 int 타입으로 생성 후 0으로 초기화

  • 카운트 된 길이만큼 반복 출력

  • 만약 max가 count보다 작을 때 max에 저장

// max값 인덱스찾기
for (int i = 0; i < count.length; i++) {
    if(max == count[i]){
        ls.add(i+1);
    }
}
  • 카운트 된 길이만큼 반복 출력

  • max값이랑 같다면

  • 최대 정답개수를 맞춘 수포자들을 ls에 추가

int[] answer = new int[ls.size()];
for (int i = 0; i < answer.length; i++) {
    answer[i] = ls.get(i);
}
  • ls의 사이즈만큼 배열 생성

  • 최대 점수 값을 가진 수포자들은 가변길이 배열 ls에 추가

  • 고정길이 배열 answer에 저장

전체 코드

import java.util.ArrayList;
import java.util.Arrays;
    class Solution {
        public int[] solution(int[] answers) {
            int[] count = new int[]{0,0,0}; // 각 사람의 정답 횟수 배열
            int[] human1 = new int[]{1, 2, 3, 4, 5}; //5 human1.length
            int[] human2 = new int[]{2, 1, 2, 3, 2, 4, 2, 5};//8 human2.length
            int[] human3 = new int[]{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};//10 human3.length
            // 0번째 % 5-> 1(0), 1번째 -> 2(1), 2번째 -> 3, 3번째 -> 4, 4번째-> 5,
            //5번째 % 5-> 1(0), 6번째 -> 2(1)
            // 정답 개수를 찾는 부분
            int[][] human = {human1, human2, human3}; //이차원 배열 만들기
            int j = 0;
            for(int[] hNum : human){
                for (int i= 0; i < answers.length; i++) { //
                    if(hNum[i % human[j].length] == answers[i]) {
                        count[j]++;
                    }
                }
                j++;
            }
            // max값의 인덱스 찾기
            ArrayList <Integer> ls = new ArrayList<>();
            // max값 찾기
            int max = 0;
            for (int i = 0; i < count.length; i++) {
                if(max < count[i]){
                    max = count[i];
                }
            }
            // max값 인덱스찾기
            for (int i = 0; i < count.length; i++) {
                if(max == count[i]){
                    ls.add(i+1);
                }
            }
            // ArrayList에서 배열 변환
            int[] answer = new int[ls.size()];
            for (int i = 0; i < answer.length; i++) {
                answer[i] = ls.get(i);
            }
            return answer;
        }
    }

0개의 댓글