[PS] 백준 1159 농구 경기

박상혁·2026년 5월 20일

PS

목록 보기
5/95

이번에는 백준 1159번 농구 경기 문제를 풀어보았습니다.

이 문제는 선수들의 성이 주어졌을 때, 같은 첫 글자를 가진 선수가 5명 이상인 알파벳을 모두 찾는 문제입니다.

이전의 알파벳 개수 문제와 비슷하게, 배열로 개수를 세는 방식으로 풀 수 있었습니다.

문제 설명

선수들의 성이 주어집니다.

감독은 성의 첫 글자가 같은 선수 5명을 선발하려고 합니다.

따라서 각 성의 첫 글자를 기준으로 몇 명이 있는지를 확인한 뒤,

  • 5명 이상인 알파벳이 있으면 그 글자들을 사전순으로 이어서 출력
  • 하나도 없으면 PREDAJA 출력

하면 됩니다.

풀이 아이디어

이 문제의 핵심은 각 성의 첫 글자가 몇 번 등장했는지 세는 것입니다.

알파벳 소문자만 나오므로 크기가 26인 배열을 두고,

각 이름의 첫 글자에 해당하는 위치 값을 1씩 증가시키면 됩니다.

그 후 배열을 순회하면서 값이 5 이상인 알파벳만 결과에 넣어주면 됩니다.

코드

#include <bits/stdc++.h>
using namespace std;

vector<char> result;
int cnt[26];

int solve() {
   for (int i = 0; i < 26; i++) {
       if (cnt[i] >= 5) {
           result.push_back('a' + i);
       }
   }

   if (result.size() != 0)
       return 1;

   return 0;
}

int main() {
    int n;
    cin >> n;

    for (int i = 0; i < n; i++) {
        string temp;
        cin >> temp;
        cnt[temp[0] - 'a']++;
    }

    if (solve()) {
        for (char c : result) {
            cout << c;
        }
    } else {
        cout << "PREDAJA";
    }

    return 0;
}

풀이 흐름

  1. 선수 수 n을 입력받는다.
  2. 각 선수의 성을 입력받는다.
  3. 성의 첫 글자를 확인해서 cnt[temp[0] - 'a'] 값을 증가시킨다.
  4. 배열을 순회하면서 개수가 5 이상인 알파벳을 결과에 넣는다.
  5. 결과가 있으면 모두 출력하고, 없으면 PREDAJA를 출력한다.

구현 포인트

이 문제는 이전에 풀었던 알파벳 개수 문제와 비슷한 방식으로 접근할 수 있었습니다.

차이가 있다면 문자열 전체를 세는 것이 아니라,

각 문자열의 첫 글자만 사용한다는 점입니다.

즉,

  • 문자열을 입력받고
  • temp[0]으로 첫 글자를 확인한 뒤
  • 해당 알파벳 배열 위치를 증가시키는 흐름입니다.

알파벳 범위가 고정되어 있기 때문에 배열을 사용하는 방식이 자연스럽습니다.

profile
엉덩이로 성장하는 개발자

0개의 댓글