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

2024. 4. 18. 21:55·코딩테스트 연습/Programmers
728x90

 

문제

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

 

제한 조건

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

입출력 예

answers return
[1,2,3,4,5] [1]
[1,3,2,4,2] [1,2,3]

 

풀이

import java.util.*;

class Solution {
    public Integer[] solution(int[] answers) {     
        List<Integer> answer = new ArrayList<>();
        int[] p1 = {1, 2, 3, 4, 5};
        int[] p2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] p3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        
        int[] score = new int[3];
        for(int i=0; i<answers.length; i++) {
            if(answers[i] == p1[i%p1.length])
                score[0]++;
            if(answers[i] == p2[i%p2.length])
                score[1]++;
            if(answers[i] == p3[i%p3.length])
                score[2]++;
        }
        
        int max = score[0];
        
        // 최댓값 찾기
        for(int i=0; i<score.length; i++) {
            if(max < score[i])
                max = score[i];
        }
        
        // 최댓값과 같으면 추가
        for(int i=0; i<score.length; i++) {
            if(max == score[i])
                answer.add(i+1);
        }
        
        return answer.toArray(new Integer[0]);
    }
}

 

수포자들의 답변 패턴은 정해져 있기 때문에 고정된 배열로 선언하였다. 첫번째 for문을 돌 때, 각 문제 인덱스를 수포자 배열의 길이로 나눠주었는데, 고정된 배열이므로 각각 5, 8, 10을 넣어도 무방할 것 같다. 문제를 맞힐 때마다 점수 배열에 1점씩 추가하여 맞힌 개수를 정하였다.

가장 많이 맞힌 사람을 구할 때 처음에 for문을 한 개만 만들어 max를 저장했더니 최댓값을 갱신하는 과정이 빠져 제대로된 답을 구할 수 없었다.

따라서 최대값을 먼저 구하고, max와 같은 경우에 수포자의 번호를 추가하여 구하였다.

 

 

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/courses/30/lessons/42840
728x90
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 연습 > Programmers' 카테고리의 다른 글

[프로그래머스] 숫자 짝꿍  (0) 2024.04.23
[프로그래머스] 가장 가까운 같은 글자  (1) 2024.04.20
[프로그래머스] 둘만의 암호  (0) 2024.04.17
[프로그래머스] 자릿수 더하기  (0) 2024.04.14
[프로그래머스] 과일 장수  (1) 2024.04.13
'코딩테스트 연습/Programmers' 카테고리의 다른 글
  • [프로그래머스] 숫자 짝꿍
  • [프로그래머스] 가장 가까운 같은 글자
  • [프로그래머스] 둘만의 암호
  • [프로그래머스] 자릿수 더하기
hxxzz
hxxzz
개발새발 안 되게 개발 노력 중
  • hxxzz
    개발새발
    hxxzz
  • 전체
    오늘
    어제
    • 분류 전체보기 (104)
      • Java (3)
      • Back-End (9)
        • Spring Boot (7)
        • DevOps (1)
        • Redis (1)
      • Computer Scrience (4)
        • Data Structrue (4)
        • Algorithm (0)
      • SQLD (3)
      • 코딩테스트 연습 (85)
        • Programmers (30)
        • 백준 (15)
        • etc. (0)
        • 99클럽 (40)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자료구조
    LeetCode
    jpa
    Stack
    N+1 문제
    BFS
    til
    프로그래머스
    java
    redission
    SQLD
    스택
    백준
    Spring Boot
    SQL
    SpringBoot
    개발자 취업
    코딩테스트 준비
    dfs
    99클럽
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
hxxzz
[프로그래머스] 모의고사
상단으로

티스토리툴바