본문 바로가기
공부/알고리즘

[프로그래머스] 모의고사

by yeaseul912 2022. 5. 24.
728x90

1.  문제 설명

더보기

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

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

2. 제한사항

더보기
  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

3. 입출력예

answers return
[1,2,3,4,5] [1]
[1,3,2,4,2] [1,2,3]
더보기

입출력 예 #1

  • 수포자 1은 모든 문제를 맞혔습니다.
  • 수포자 2는 모든 문제를 틀렸습니다.
  • 수포자 3은 모든 문제를 틀렸습니다.

따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.

입출력 예 #2

  • 모든 사람이 2문제씩을 맞췄습니다.

4. 풀이

Solution 1
import java.util.*;
class Solution {
    public int[] solution(int[] answers) {
        
        int[] supoza1 = { 1, 2, 3, 4, 5 };  
        int[] supoza2 = { 2, 1, 2, 3, 2, 4, 2, 5 };
        int[] supoza3 = { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 };
        int supoza1Collect = collectAnswers(supoza1, answers);
        int supoza2Collect = collectAnswers(supoza2, answers);
        int supoza3Collect = collectAnswers(supoza3, answers);
        
        int max = 0;
        max = Math.max(supoza1Collect, max);
        max = Math.max(supoza2Collect, max);
        max = Math.max(supoza3Collect, max);
        
        ArrayList<Integer> l = new ArrayList<>();
        
        if(supoza1Collect == max) l.add(1);
        if(supoza2Collect == max) l.add(2);
        if(supoza3Collect == max) l.add(3);
        int[] answer = new int[l.size()];
        for(int i = 0 ; i<answer.length; i++){
            answer[i] = l.get(i);
        }
        
        return answer;
    }
    
    public int collectAnswers(int[] supoza, int[] answers){
        // 나머지가 1이면 첫번째(0)꺼 2이면 2번(1)째 3이면 3번(2)째 4이면 4번(3)째 0이면 다섯번째(4)
        int sl = supoza.length;
        int collect = 0;
        int supozaAnswer = 0;
        for(int a = 0; a<answers.length; a++){
            int turn = ((a+1)%sl); // 1/5 = 0 ... 1 5/5 = 1 ... 0
            if(turn == 0) supozaAnswer = supoza[sl-1];
            else supozaAnswer = supoza[turn-1];
            if(supozaAnswer == answers[a]) collect++;
        }
        return collect;        
    }
}

5. 결과 

Solution 1

6. 마치며

쏘 노멀하게 풀수 있었던 문제.~ 사실 어제 풀고 잤는데 오늘 포스팅 한것이다. 오늘 하나 더 풀 예정 !!

주말에 시골을 다녀왔더니 너무 힘들다 ㅠㅠ 시골다녀온것도 블로그에 올려볼깡?

반응형

댓글