본문 바로가기
백준/10001 - 15000

[백준] 13417번 : 카드 문자열(JAVA)

by lms0806 2021. 8. 7.
728x90
반응형

https://www.acmicpc.net/problem/13417

 

13417번: 카드 문자열

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫째 줄에 테스트 케이스의 개수를 나타내는 자연수 T가 주어진다. 각각의 테스트 케이스의 첫째 줄에 처

www.acmicpc.net

풀이

입력받음 카드문자들을 왼쪽 or 오른쪽으로 놓았을 때 가장 사전순으로 앞에있는 문자열을 출력하는 문제입니다.

Deque를 사용하면 간단하게 푸실 수 있습니다.

처음에 비어있으면 문자를 넣고 그 후부터 비교하면서 넣으면 됩니다.

Deque의 맨 앞 문자가 넣을 문자보다 크거나 같으면 앞에 아니면 뒤에 넣는 식으로 문제를 푸시면 됩니다.

 

소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int size = Integer.parseInt(br.readLine());
		
		StringBuilder sb = new StringBuilder();
		while(size --> 0) {
			br.readLine();
			
			Deque<Character> deque = new LinkedList<>();
			
			StringTokenizer st = new StringTokenizer(br.readLine());
			while(st.hasMoreTokens()) {
				char ch = st.nextToken().charAt(0);
				
				if(deque.isEmpty()) {
					deque.add(ch);
				}
				else {
					if(deque.getFirst() >= ch) {
						deque.addFirst(ch);
					}
					else {
						deque.addLast(ch);
					}
				}
			}
			while(deque.size() != 0) {
				sb.append(deque.poll());
			}
			sb.append("\n");
		}
		System.out.print(sb);
	}
}
728x90
반응형

댓글