와드의 블로그

1159번: 농구 경기 본문

PS/B.O.J

1159번: 농구 경기

Ward 2026. 3. 19. 15:35

문제

상근이는 농구팀의 감독입니다. 상근이는 성의 첫 글자가 같은 선수 5명을 선발하여 선발 명단을 만들려고 합니다. 만약 성의 첫 글자가 같은 선수가 5명보다 적다면, 그 팀은 경기를 기권해야 합니다. 선수들의 성이 주어질 때, 선발 명단에 포함될 수 있는 성의 첫 글자를 사전순으로 공백 없이 모두 출력하거나, 기권해야 하는 경우 "PREDAJA"를 출력하는 문제입니다.

  • 입력: 첫째 줄에 선수의 수 N (1 ≤ N ≤ 150), 다음 N개의 줄에 각 선수의 성이 주어집니다. (성은 알파벳 소문자로만 이루어져 있습니다.)
  • 출력: 조건을 만족하는 성의 첫 글자를 사전순으로 출력하거나, "PREDAJA"를 출력합니다.

풀이

알파벳 소문자의 개수(26개)만큼 배열을 만들어 빈도수를 체크하는 문자열 처리 문제입니다.

  1. 빈도수 배열 선언: 알파벳 소문자 'a'부터 'z'까지의 개수를 세기 위해 크기 26의 정수 배열 cnt를 선언합니다.
  2. 첫 글자 카운팅: 입력받은 문자열 s의 첫 번째 글자(s.charAt(0))만 추출합니다. 여기서 'a'를 빼면 0부터 25 사이의 인덱스로 변환할 수 있으며, 해당 인덱스의 값을 1씩 증가시킵니다.
  3. 5명 이상인 알파벳 추출: cnt 배열을 인덱스 0부터 25까지 순회합니다. 빈도수가 5 이상인 경우, 인덱스에 다시 'a'를 더해 원래의 알파벳 문자로 복원한 뒤 StringBuilder에 덧붙입니다. 인덱스 0부터 순회하므로 자연스럽게 사전순(오름차순)으로 정렬됩니다.
  4. 결과 출력: StringBuilder의 길이(length())가 0이라면 5명 이상인 성이 하나도 없다는 뜻이므로 "PREDAJA"를 출력하고, 아니라면 모아둔 문자열을 출력합니다.

코드

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

       int n = Integer.parseInt(br.readLine());

       // 알파벳 소문자의 등장 횟수를 저장할 배열
       int[] cnt = new int[26];
       for (int i = 0; i < n; i++) {
          String s = br.readLine();
          // 첫 글자를 아스키코드 연산으로 인덱스로 변환하여 카운트 증가
          cnt[s.charAt(0) - 'a']++;
       }

       StringBuilder sb = new StringBuilder();
       for (int i = 0; i < 26; i++) {
          // 5명 이상인 경우에만 정답 문자열에 추가
          if (cnt[i] >= 5) {
             sb.append((char)(i + 'a'));
          }
       }

       // 조건을 만족하는 선수가 없다면 PREDAJA 출력
       if (sb.length() == 0) {
          bw.write("PREDAJA");
       } else {
          bw.write(sb.toString());
       }
       
       bw.flush();
    }
}

알고리즘 분류

문자열 처리 (String), 구현 (Implementation)

'PS > B.O.J' 카테고리의 다른 글

9996번: 한국이 그리울 땐 서버에 접속하지  (0) 2026.03.20
11655번: ROT13  (0) 2026.03.19
10988번: 팰린드롬인지 확인하기  (0) 2026.03.19
2979번: 트럭 주차  (0) 2026.03.19
10808번: 알파벳 개수  (0) 2026.03.19