Post

임스와 함께하는 미니게임 (BOJ 25757)

임스와 함께하는 미니게임 (BOJ 25757)

임스와 함께하는 미니게임 (BOJ 25757)

📖 문제 설명

임스와 함께 미니게임을 하려 한다.

게임 종류에 따라 한 판에 필요한 인원이 다르다.

  • Y : 1명

  • F : 2명

  • O : 3명

신청한 사람들의 이름이 주어질 때,

임스가 총 몇 번 게임을 할 수 있는지 구하는 문제이다.

※ 같은 사람이 여러 번 신청할 수 있다.

✅ 조건 정리

  • 신청 인원 수 N (1 ≤ N ≤ 100,000)

  • 게임 종류: Y, F, O 중 하나

  • 같은 사람이 여러 번 신청할 수 있음

  • 중복 신청은 한 번만 인정

  • 출력: 임스가 진행할 수 있는 게임 횟수

💡 풀이 방법

1️⃣ 접근 아이디어

핵심은:

🔥 “중복 제거”

같은 사람이 여러 번 신청할 수 있기 때문에

실제로 게임에 참여 가능한 인원은 중복 제거된 인원 수이다.

이를 위해 HashSet을 사용한다.

2️⃣ 게임 종류별 처리

게임 옵션에 따라 한 판에 필요한 인원이 다르다:

따라서:

1
게임 횟수 = (중복 제거된 인원 수) / (게임에 필요한 인원 수)

✔ 예시

입력:

1
2
3
4
5
6
7
8
7 F
a
b
c
a
d
b
e

중복 제거 후:

1
a, b, c, d, e → 총 5명

F는 2명 필요 →

5 / 2 = 2번 가능

💻 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package boj;

import java.io.*;
import java.util.*;

public class Boj10431 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int testCase = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        for (int t = 1; t <= testCase; t++) {
            StringTokenizer st = new StringTokenizer(br.readLine());

            int caseNum = Integer.parseInt(st.nextToken()); // 테스트 번호
            int[] arr = new int[20];
            int moveCount = 0;

            for (int i = 0; i < 20; i++) {
                arr[i] = Integer.parseInt(st.nextToken());

                // 현재 학생(arr[i])보다 앞에 있으면서 키 큰 학생 수 세기
                for (int j = 0; j < i; j++) {
                    if (arr[j] > arr[i]) {
                        moveCount++;
                    }
                }
            }

            sb.append(caseNum).append(" ").append(moveCount).append("\n");
        }

        System.out.print(sb);
    }
}

⏱ 시간 복잡도

  • 시간복잡도: O(N)

  • 공간복잡도: O(N)

🔎 배운 점 / 느낀 점

  • 중복 제거 문제에서는 Set이 가장 간단한 해결 방법이다.

  • 조건 분기는 나누기 연산 하나로 해결 가능하다.

  • 자료구조 선택이 문제 난이도를 크게 낮춘다.

This post is licensed under CC BY 4.0 by the author.