모바일 개발하는 자바리안의 메모장

자바(JAVA) - 모의고사(Programmers : 42840) 본문

Java/Java.algorithm

자바(JAVA) - 모의고사(Programmers : 42840)

자바리안 2021. 6. 10. 14:16
반응형

https://programmers.co.kr/learn/courses/30/lessons/42840

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

단순한 완전탐색 문제.
정해진 학생 수 + 반복되는 패턴을 배열로 만들어 쉽게 정답을 찾을 수 있었다.

 

실행 순서는 다음과 같다 :

    1. 3명 수포자의 반복되는 패턴, 패턴의 사이즈, 정답 개수 카운터 배열로 정의

    2. Input의 각 숫자를 확인하여 정답일 경우 카운터 값 증가

    3. 정답 카운터 배열에서 가장 높은 점수 확인

    4. 가장 높은 점수를 획득한 수포자(들)의 번호 ArrayList에 입력

    5. ArrayList에 입력된 값을 return할 Array에 입력하여 반환

 

<코드>

import java.util.*;
class Solution {
    public int[] solution(int[] answers) {
        // 수포자 3명의 반복되는 패턴 배열로 저장
        int[] spj1 = {1,2,3,4,5};
        int[] spj2 = {2,1,2,3,2,4,2,5};
        int[] spj3 = {3,3,1,1,2,2,4,4,5,5};
        
        // For Loop에서 사용하기 위해 각 배열 사이즈 배열로 저장
        int[] size = {spj1.length, spj2.length, spj3.length};
        
        // 각 수포자의 정답 카운트 
        int[] corrCnt = new int[3];
        
        // 정답이 일치할 경우, 정답 카운트 배열에 기록
        for(int i = 0; i < answers.length; i++) {
            int currAns = answers[i];
            
            if(currAns == spj1[i % size[0]])
                corrCnt[0] ++;
            if(currAns == spj2[i % size[1]])
                corrCnt[1] ++;
            if(currAns == spj3[i % size[2]])
                corrCnt[2] ++;        
        }
        
        int highestScore = 0;
        
        // 가장 높은 스코어 확인
        for(int i = 0; i < 3; i++) {
            if(highestScore < corrCnt[i]) {
                highestScore = corrCnt[i];
            }
        }
        
        // 가장 높은 점수의 수포자 번호 ArrayList에 입력
        ArrayList<Integer> spjNumAl = new ArrayList<Integer>();
        int highestCount = 0;
        for(int i = 0; i < 3; i++) {
            if(highestScore == corrCnt[i]) {
                spjNumAl.add(i + 1);
            }
        }
        
        // ArrayList에 담긴 정보 Array에 입력
        int[] answer = new int[spjNumAl.size()];
        for(int i = 0; i < spjNumAl.size(); i++) {
            answer[i] = spjNumAl.get(i);
        }
        
        return answer;
    }
}
반응형
Comments