티스토리 뷰
반응형

https://www.acmicpc.net/problem/5052
5052번: 전화번호 목록
첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가
www.acmicpc.net
난이도 : 골드 4
트라이를 이용했습니다.
2021/01/07 - [문제풀이/자바] - [백준 14725] 개미굴 (자바)
[백준 14725] 개미굴 (자바)
https://www.acmicpc.net/problem/14725 14725번: 개미굴 첫 번째 줄은 로봇 개미가 각 층을 따라 내려오면서 알게 된 먹이의 정보 개수 N개가 주어진다. (1 ≤ N ≤ 1000) 두 번째 줄부터 N+1 번째 줄까지, 각..
jellyinghead.tistory.com
트라이 String 버전
함수
void main
입력을 받고 트라이를 구성합니다.
한 개의 입력을 처리할 때 어느 입력의 끝을 지나면 일관성이 없으므로 "NO"를 StringBuilder에 추가합니다. (28번째 줄)
입력을 트라이에 넣을 때 항상 입력의 마지막을 체크해줍니다. (55번째 줄)
class Trie
word는 이 트라이가 입력의 끝인지를 나타냅니다. n은 트라이의 숫자입니다.
al은 다음으로 이어지는 값입니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.BufferedReader; | |
import java.io.InputStreamReader; | |
import java.util.ArrayList; | |
public class p5052 { | |
public static void main(String[] args) throws Exception{ | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
int tc = Integer.parseInt(br.readLine()); | |
StringBuilder sb = new StringBuilder(); | |
//테스트 케이스 | |
while(tc --> 0) { | |
int n = Integer.parseInt(br.readLine()); | |
Trie trie = new Trie(-1); | |
boolean pass = false; | |
//입력 수 | |
while(n --> 0) { | |
String input = br.readLine(); | |
Trie node = trie; | |
if(pass) | |
continue; | |
//한 입력 처리 | |
for(int i = 0; i < input.length(); i++) { | |
int now = input.charAt(i) - '0'; | |
if(node.word) { | |
sb.append("NO").append("\n"); | |
pass = true; | |
break; | |
} | |
else { | |
int index = -1; | |
for(int j = 0; j < node.al.size(); j++) { | |
if(node.al.get(j).n == now) { | |
index = j; | |
break; | |
} | |
} | |
if(index == -1) { | |
node.al.add(new Trie(now)); | |
node = node.al.get(node.al.size()-1); | |
} | |
else { | |
node = node.al.get(index); | |
if(i == input.length()-1) { | |
sb.append("NO").append("\n"); | |
pass = true; | |
break; | |
} | |
} | |
if(i == input.length()-1) | |
node.word = true; | |
} | |
} | |
} | |
if(!pass) | |
sb.append("YES").append("\n"); | |
} | |
System.out.println(sb.toString()); | |
} | |
static class Trie{ | |
boolean word; | |
int n; | |
ArrayList<Trie> al; | |
Trie(int n) { | |
this.n = n; | |
al = new ArrayList<>(); | |
word = false; | |
} | |
} | |
} |
반응형
'문제풀이 > 백준 && 프로그래머스' 카테고리의 다른 글
[백준 20949] 효정과 새 모니터 (자바) (4) | 2021.04.21 |
---|---|
[프로그래머스] 프렌즈4블록 (자바) (0) | 2021.02.11 |
[백준 14725] 개미굴 (자바) (0) | 2021.01.07 |
[백준 1937] 욕심쟁이 판다 (자바) (0) | 2021.01.04 |
[백준 3860] 할로윈 묘지 (자바) (0) | 2020.12.01 |
댓글