Development Logs/Algorithms

[JAVA] 프로그래머스 : 모의고사 (코딩테스트 고득점 kit > 완전탐색)

유뱅유뱅뱅 2020. 7. 20. 00:01

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

 

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

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

programmers.co.kr

첫 번째 풀이

수포자 3명이 일정하게 문제의 답을 찍으므로 person1, person2, person3 배열로 찍는 답의 순서를 적어줌
그리고 cnt 배열에 수포자 세명의 맞은 문제 갯수를 각각 저장해줌

그 중 가장 많이 맞은 문제 갯수를 찾아 max 변수에 저장해줌
그 후 가장 많이 맞은 문제 갯수와 수포자들의 맞은 문제 갯수를 비교하여 같은 경우 ArrayList에 사람 index 값을 넣어줌

코드

import java.util.*;

// 모의고사
// answers: 정답이 순서대로 들은 answers
class Solution {
    public int[] solution(int[] answers) {
        
        int[] person1 = {1, 2, 3, 4, 5};
        int[] person2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] person3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        
        int[] cnt = new int[3];
        
        for(int i=0; i<answers.length; i++){
            if(answers[i] == person1[i%5]) cnt[0]++;
            if(answers[i] == person2[i%8]) cnt[1]++;
            if(answers[i] == person3[i%10]) cnt[2]++;
        }
        
        // 가장 높은 점수 
        int max = Math.max(cnt[0], Math.max(cnt[1], cnt[2]));
        
        List<Integer> list = new ArrayList<>();
        
        // 가장 높은 점수를 받은 사람을 찾는 것
        if(max == cnt[0])
            list.add(1);
        if(max == cnt[1])
            list.add(2);
        if(max == cnt[2])
            list.add(3);
        
        int[] answer = new int[list.size()];
        for(int i=0; i<list.size(); i++){
            answer[i] = list.get(i);
        }
       
        return answer;
    }
}

 

두 번째 풀이

코드

import java.util.*;
// 모의고사
class Solution {
    public int[] solution(int[] answers) {
        
        // 찍는 방식
        int[] person1 = {1, 2, 3, 4, 5};
        int[] person2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] person3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        
        int sum1 = 0;
        int sum2 = 0;
        int sum3 = 0;
        
        // 맞힌 문제 수
        for(int i=0; i<answers.length; i++){
            if(person1[(i%5)] == answers[i])
                sum1++;
            if(person2[(i%8)] == answers[i])
                sum2++;
            if(person3[(i%10)] == answers[i])
                sum3++;
        }
        
        int max = Math.max(sum1, Math.max(sum2, sum3));
        
        List<Integer> list = new ArrayList<>();
        if(max == sum1)
            list.add(1);
        if(max == sum2)
            list.add(2);
        if(max == sum3)
            list.add(3);
        
        if(list.size()>1)
            Collections.sort(list);
        
        int[] answer = new int[list.size()];
        for(int i=0; i<list.size(); i++){
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}