코드굽는 타자기

Programmers[42840] - 모의고사[Level1] 본문

알고리즘/완전탐색

Programmers[42840] - 모의고사[Level1]

bright-jun 2020. 2. 17. 17:21

링크

 

코딩테스트 연습 - 모의고사 | 프로그래머스

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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,

programmers.co.kr

 

문제설명

  • 완탐, 시뮬

문제풀이

  • 완탐, 시뮬
  • mod 이용한 탐색

문제코드

import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;

public class Solution42840 {

//    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, ...

    public static int[][] rand= {
            {1, 2, 3, 4, 5},
            {2, 1, 2, 3, 2, 4, 2, 5},
            {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}
    };
    public static int[] solution(int[] answers) {
//      5,8,10,answers.length의 최소공배수
        int al = answers.length;
        int[][] score = {
                {1,0},
                {2,0},
                {3,0},
        };

        for (int i = 0; i < al; i++) {
            if(answers[i]==rand[0][i%5]) {
                score[0][1]++;
            }
            if(answers[i]==rand[1][i%8]) {
                score[1][1]++;
            }
            if(answers[i]==rand[2][i%10]) {
                score[2][1]++;
            }
        }
        int max=-1;
        for (int i = 0; i < 3; i++) {
            max = Math.max(max, score[i][1]);
        }

        LinkedList<Integer> ans = new LinkedList<>();
        for (int i = 0; i < 3; i++) {
            if(score[i][1]==max) ans.add(score[i][0]);
        }

        int[] answer = new int[ans.size()];
        for (int i = 0; i < ans.size(); i++) {
            answer[i] = ans.get(i);
        }
        return answer;
    }
    public static void main(String[] args) {
        System.out.println(Arrays.toString(solution(new int[] {1,2,3,4,5})));
        System.out.println(Arrays.toString(solution(new int[] {1,3,2,4,2})));
    }
}

아쉬운점

  • 문제 제대로 안읽음
    • 시험은 최대 10,000 문제이지 10000문제가 아니다...
    • 최대공약수 최소공배수 구할 의미가 없었음.

잘한점

  • (?)최대공약수, 최소공배수 공부함
  • mod 씀
Comments