백준/출제한 문제들
[백준] 30034번 : Slice String
lms0806
2023. 9. 25. 22:39
728x90
https://www.acmicpc.net/problem/30034
30034번: Slice String
첫 번째 줄에는 문자 구분자의 개수 $N$이 주어진다. $(1 \le N \le 1\,000)$ 두 번째 줄에는 $N$개의 문자 구분자가 공백으로 구분되어 주어진다. 세 번째 줄에는 숫자 구분자의 개수 $M$이 주어진다. $(1
www.acmicpc.net
해당 문제는 문자열을 자르고 합치는 과정을 토대로 만든 문제입니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
HashSet<Character> set = new HashSet<>();
StringTokenizer st = new StringTokenizer(br.readLine());
while(n --> 0) {
set.add(st.nextToken().charAt(0));
}
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
while(m --> 0) {
set.add(st.nextToken().charAt(0));
}
int k = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
while(k --> 0) {
char ch = st.nextToken().charAt(0);
if(set.contains(ch)) {
set.remove(ch);
}
}
br.readLine();
boolean flag = false;
StringBuilder sb = new StringBuilder();
for(char c : br.readLine().toCharArray()) {
if(set.contains(c) || c == ' ') {
if(flag) {
sb.append("\n");
flag = false;
}
continue;
}
sb.append(c);
flag = true;
}
System.out.print(sb);
}
}
저는 contains를 활용하여 문제를 해결하였지만, 다른 풀이도 존재합니다.
범위가 작아 ArrayList를 활용하셔도 됩니다.
728x90