본문 바로가기
백준/출제한 문제들

[백준] 30034번 : Slice String

by lms0806 2023. 9. 25.
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
반응형

댓글