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클럽
- 자바
- 웹
- 프로그래밍 언어
- 인접 행렬
- 코딩테스트준비
- til
- 자료구조
- 파이썬
- 오블완
- #코드트리 #코딩테스트 #코테공부 #백트래킹 #알고리즘 기초
- C
- 항해99
- 코딩테스트
- 자바스크립트
- 운영체제
- Java
- 코테공부
- 1일1코테
- 알고리즘
- 프로그래머스
Archives
- Today
- Total
와드의 블로그
9536번: 여우는 어떻게 울지? 본문
문제
녹음된 소리에서 다른 모든 동물들의 울음소리를 제외하고 여우의 울음소리만 알아내는 프로그램을 작성하는 문제입니다. 녹음된 소리는 여러 단어로 이루어져 있으며, 각 동물의 울음소리는 "<동물> goes <소리>" 형태로 주어집니다. 질문인 "what does the fox say?"가 주어지면 입력을 종료하고, 녹음된 소리 중 다른 동물의 울음소리를 모두 뺀 나머지를 출력해야 합니다.
- 입력: 첫째 줄에 테스트 케이스의 개수 T가 주어집니다. 각 테스트 케이스의 첫째 줄에는 녹음된 소리가 주어지며, 이후로 다른 동물의 울음소리가 주어집니다. 마지막 줄에는 "what does the fox say?"가 주어집니다.
- 출력: 각 테스트 케이스마다 여우의 울음소리를 공백으로 구분하여 출력합니다.
링크: https://www.acmicpc.net/problem/9536
풀이: HashSet을 활용한 문자열 파싱 및 필터링
녹음된 전체 소리를 배열로 분리한 뒤, 알려진 다른 동물들의 울음소리를 HashSet에 모아두고 이를 기준으로 필터링하는 효율적인 접근 방식입니다.
- 문자열 파싱 (String Parsing): 첫 줄에 주어지는 녹음된 소리를 split(" ")을 사용하여 공백 기준으로 분리하고 sBits 배열에 저장합니다.
- 해시 집합(HashSet) 활용: 다른 동물들의 울음소리를 저장하기 위해 탐색 속도가 O(1)로 매우 빠른 HashSet을 사용합니다.
- 종료 조건 및 데이터 수집: 무한 루프(while(true)) 안에서 입력을 계속 받으며 split(" ")으로 단어를 분리합니다.
- 만약 분리된 배열의 마지막 단어(tmp[tmp.length - 1])가 "say?"라면, 이는 종료 문장인 "what does the fox say?"를 의미하므로 루프를 탈출합니다.
- 그렇지 않다면 일반적인 울음소리 정보("animal goes sound")이므로, 마지막 단어인 sound 부분을 Set에 추가합니다.
- 여우 소리 필터링: 미리 분리해둔 sBits 배열을 순회합니다. Set.contains(s)를 통해 현재 소리가 다른 동물의 소리인지 확인하고, 포함되어 있지 않다면(!set.contains(s)) 이는 여우의 소리이므로 BufferedWriter를 이용해 출력합니다.
코드
import java.io.*;
import java.util.*;
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 t = Integer.parseInt(br.readLine());
while (t-- > 0) {
// 1. 녹음된 전체 소리 파싱
String[] sBits = br.readLine().split(" ");
Set<String> set = new HashSet<>();
// 2. 다른 동물의 울음소리 수집 및 종료 조건 확인
while (true) {
String[] tmp = br.readLine().split(" ");
// "what does the fox say?"의 마지막 단어로 종료 판별
if (tmp[tmp.length - 1].equals("say?")) {
break;
}
// "animal goes sound" 형태에서 마지막 단어인 sound를 저장
set.add(tmp[tmp.length - 1]);
}
// 3. 수집된 소리를 제외한 여우 소리만 필터링하여 출력
for (String s : sBits) {
if (!set.contains(s)) {
bw.write(s + " ");
}
}
bw.write("\n");
}
bw.flush();
}
}
알고리즘 분류
자료 구조 (Data Structures), 문자열 (String), 해시를 사용한 집합과 맵 (Hash Set/Map), 파싱 (Parsing)
'PS > B.O.J' 카테고리의 다른 글
| 9663번: N-Queen (0) | 2026.04.12 |
|---|---|
| 14497번: 주난의 난 (0) | 2026.04.12 |
| 2999번: 비밀 이메일 (0) | 2026.04.10 |
| 1969번: DNA (0) | 2026.04.10 |
| 3613번: Java vs C++ (0) | 2026.04.10 |