Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 갭체크
- 코딩테스트
- 99클럽
- 파이썬
- 개발자취업
- Java
- 웹
- 코딩테스트사이트추천
- 자료구조
- 데이터베이스
- #코드트리 #코딩테스트 #코테공부 #백트래킹 #알고리즘 기초
- 자바스크립트
- 플로이드-워셜
- 티스토리챌린지
- 프로그래머스
- 코테공부
- 인접 행렬
- 오블완
- C
- 운영체제
- 연결 리스트
- 1일1코테
- 개발자루틴
- 프로그래밍 언어
- 코딩테스트준비
- 코드트리
- til
- 항해99
- 자바
- 알고리즘
Archives
- Today
- Total
와드의 블로그
1159번: 농구 경기 본문
문제
상근이는 농구팀의 감독입니다. 상근이는 성의 첫 글자가 같은 선수 5명을 선발하여 선발 명단을 만들려고 합니다. 만약 성의 첫 글자가 같은 선수가 5명보다 적다면, 그 팀은 경기를 기권해야 합니다. 선수들의 성이 주어질 때, 선발 명단에 포함될 수 있는 성의 첫 글자를 사전순으로 공백 없이 모두 출력하거나, 기권해야 하는 경우 "PREDAJA"를 출력하는 문제입니다.
- 입력: 첫째 줄에 선수의 수 N (1 ≤ N ≤ 150), 다음 N개의 줄에 각 선수의 성이 주어집니다. (성은 알파벳 소문자로만 이루어져 있습니다.)
- 출력: 조건을 만족하는 성의 첫 글자를 사전순으로 출력하거나, "PREDAJA"를 출력합니다.
풀이
알파벳 소문자의 개수(26개)만큼 배열을 만들어 빈도수를 체크하는 문자열 처리 문제입니다.
- 빈도수 배열 선언: 알파벳 소문자 'a'부터 'z'까지의 개수를 세기 위해 크기 26의 정수 배열 cnt를 선언합니다.
- 첫 글자 카운팅: 입력받은 문자열 s의 첫 번째 글자(s.charAt(0))만 추출합니다. 여기서 'a'를 빼면 0부터 25 사이의 인덱스로 변환할 수 있으며, 해당 인덱스의 값을 1씩 증가시킵니다.
- 5명 이상인 알파벳 추출: cnt 배열을 인덱스 0부터 25까지 순회합니다. 빈도수가 5 이상인 경우, 인덱스에 다시 'a'를 더해 원래의 알파벳 문자로 복원한 뒤 StringBuilder에 덧붙입니다. 인덱스 0부터 순회하므로 자연스럽게 사전순(오름차순)으로 정렬됩니다.
- 결과 출력: 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 |