본문 바로가기
코딩테스트/프로그래머스

[완전탐색] 모의고사 - JAVA

by 의정부핵꿀밤 2022. 4. 30.
728x90

https://programmers.co.kr/learn/courses/30/lessons/42840?language=java 

 

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

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

programmers.co.kr


레벨 1의 완전탐색이라 그냥 쉽게 반복문 돌려서 풀었다

바아로 코드 보자

 

 

자바 코드)

import java.util.*;
class Solution {
    public ArrayList<Integer> solution(int[] answers) {
        // 1 : 1, 2, 3, 4, 5 (5)
        // 2 : 2, 1, 2, 3, 2, 4, 2, 5 (8)
        // 3 : 3 ,3 ,1, 1, 2, 2, 4, 4, 5, 5 (10)
        ArrayList<Integer> answer = new ArrayList<>();
        int[] num = new int[3];
        int[] one = {1, 2, 3, 4, 5};
        int[] two = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] three = {3 ,3 ,1, 1, 2, 2, 4, 4, 5, 5};
        
        for(int i=0;i<answers.length;i++) {
            int a = answers[i];
            if(a == one[i%5]) {
                num[0]++;
            }
            if(a == two[i%8]) {
                num[1]++;
            }
            if(a == three[i%10]) {
                num[2]++;
            }
        }
        
        int max=num[0];
        int maxIdx = 0;
        for(int i=1;i<3;i++) {
            if(num[i]>max) {
                maxIdx = i;
                max = num[i];
            }
        }
        for(int i=0;i<3;i++) {
            if(num[i] == max) {
                answer.add(i+1);
            }
        }
        return answer;
    }
}

우선 1, 2, 3번 정답지를 배열에 저장한다

그리고 반복마디의 길이만큼 나머지를 구해서 답을 비교하고 맞으면 num 배열 값을 추가했다

num 배열은 각각 1, 2, 3번 애들이 몇개나 맞았는지 계산하기 위해 구한 것이다

반복이 끝나면 num 배열에서 최댓값을 구하고 중복된 애들이 있을수도 있으니까 num 배열의 반복문을 돌면서 가장 많이 맞은 애들의 index를 answer에 추가해준다

여기서 answer에 추가를 해줘야해서 int[] 를 ArrayList<Integer>로 바꿔줬다

끝!

728x90

댓글