프로그래머스 모의고사 JAVA 풀이 (완전탐색)

2026. 6. 6. 08:51·코테(Solved.ac + Programmers)
728x90

📌 문제 개요

수포자 3명이 각각 다른 패턴으로 문제를 찍는다.

정답 배열이 주어졌을 때 가장 많은 문제를 맞힌 사람의 번호를 반환하는 문제이다.

동점자가 여러 명인 경우 오름차순으로 모두 반환해야 한다.


📌 접근 방법

각 수포자의 찍는 패턴을 배열로 저장한다.

문제 수는 패턴 길이보다 길 수 있으므로 % 연산을 사용해 패턴을 반복한다.

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};

각 문제마다 정답과 비교하여 맞힌 개수를 저장한다.

모든 문제를 확인한 뒤 가장 높은 점수를 찾고, 해당 점수를 가진 사람을 결과에 담는다.

p1[i % p1.length]

📌 핵심 아이디어

1. 패턴 반복


예를 들어 패턴 길이가 5일 때 패턴이 자동으로 반복된다.

p1[i % p1.length]
i = 0 → p1[0]
i = 1 → p1[1]
i = 2 → p1[2]
i = 3 → p1[3]
i = 4 → p1[4]
i = 5 → p1[0]

2. 점수 계산

각 수포자의 정답 개수를 저장한다.
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]++;

3. 최고 점수 찾기

최고 점수를 구한 후
int max = Math.max(score[0],
          Math.max(score[1], score[2]));

조건으로 동점자를 모두 결과에 추가한다.

if(score[i] == max)

📌 전체 코드

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {

        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 = Math.max(score[0],
                Math.max(score[1], score[2]));

        List<Integer> list = new ArrayList<>();

        for (int i = 0; i < score.length; i++) {
            if (score[i] == max) {
                list.add(i + 1);
            }
        }

        return list.stream()
                .mapToInt(Integer::intValue)
                .toArray();
    }
}

📄 정리

  • 반복되는 패턴은 % 연산으로 처리한다.
  • 각 수포자의 정답 개수를 카운트한다.
  • 최고 점수를 찾고 동점자를 모두 반환한다.
  • 완전탐색 구현 문제이지만 % 연산을 활용하는 것이 핵심이다.
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

프로그래머스 문자열 나누기 JAVA 풀이 (문자열, 구현)  (0) 2026.06.09
프로그래머스 비밀지도 JAVA 풀이 (비트연산, 문자열 변환)  (0) 2026.06.09
프로그래머스 명예의 전당 (1) JAVA 풀이 (우선순위 큐, PriorityQueue)  (0) 2026.06.05
프로그래머스 콜라 JAVA 풀이 (구현, 시뮬레이션)  (0) 2026.06.04
카드 뭉치 JAVA 풀이 (구현, 문자열)  (0) 2026.06.03
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 프로그래머스 문자열 나누기 JAVA 풀이 (문자열, 구현)
  • 프로그래머스 비밀지도 JAVA 풀이 (비트연산, 문자열 변환)
  • 프로그래머스 명예의 전당 (1) JAVA 풀이 (우선순위 큐, PriorityQueue)
  • 프로그래머스 콜라 JAVA 풀이 (구현, 시뮬레이션)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

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

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    자료구조
    문자열
    시뮬레이션
    정렬
    수학
    배열
    피보나치
    level0
    알고리즘
    정보처리기사
    완전탐색
    정처기실기
    level1
    브루트포스
    구현
    백준
    springboot
    dp
    기출문제
    정처기오답노트
    코딩테스트
    java
    solved.ac
    프로그래머스
    정처기
    실기
    백엔드개발자
    정보처리기사 실기 기출문제
    Level2
    자바
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
프로그래머스 모의고사 JAVA 풀이 (완전탐색)
상단으로

티스토리툴바