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

코드설명

구현(Implementation) + 스택(Stack) 을 활용합니다.

 

구현하다보면, 맞는데 왜 틀리지 라는 상황이 발생합니다.

 

첫번쨰 유의사항입니다. 입력자체가 틀리다면 울음소리가 잘못된 것이므로 -1 을 출력해야 합니다.

예시케이스입니다.

kcauquack

위의 테스트케이스는 틀립니다. 이유는 kcau는 사용되지 못했기 때문입니다.

 

저의 경우, 오리가 한명도 없어서 이제 새로운 오리가 존재한다고 예측할떄,

처음에는 반드시 'q' 로 시작하는 것으로만 처리해서 계속해서 86%에서 오답이 발생했는데, 이와 다르게 만약 첫 시작에는 반드시 울음소리를 삽입하게 만들어 오류 울음소리를 찾아냅니다.

			//만약 넣을 수 있는 공간이 없었다면,
			if(flag == false) {
				//새로 추가할 소리의 첫시작은 반드시 'q'이어야 함.
//				if(word == wordArray[0]) {
					arr.add(new Stack<Character>());
					arr.get(arr.size() - 1).add(word);
//				}
			}

 

두번째는, Stack을 활용하여 구현을 편하게 할 수 있습니다.

가장 맨위의 울음소리와 다음 울음소리만 비교하면 되기 때문입니다.

 

코드

package Main;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Stack;
import java.util.StringTokenizer;
 
public class Main {
	static int N, M, P, K, A, B, X, R, T;
	static int answer = 0;
//	static int[] arr;
	static ArrayList<Stack<Character>> arr = new ArrayList<Stack<Character>>();
	static char[] wordArray = new char[] {'q','u','a','c','k'};
	static HashSet<Character> hashset = new HashSet<>();
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		String str = st.nextToken();
		
		for(int i=0; i<str.length();i++) {
			Character word = str.charAt(i);
			
			boolean flag = false;
			for(int j=0; j<arr.size(); j++) {
				Stack<Character> stack = arr.get(j);
				if(word == wordArray[stack.size()]) {
					flag = true;
					stack.add(word);
					if(stack.size() == 5) {
						stack.clear();
					}
					break;
				}
			}
			
			//만약 넣을 수 있는 공간이 없었다면,
			if(flag == false) {
				//새로 추가할 소리의 첫시작은 반드시 'q'이어야 함.
//				if(word == wordArray[0]) {
					arr.add(new Stack<Character>());
					arr.get(arr.size() - 1).add(word);
//				}
			}
			
		}
		
		for(int j=0; j<arr.size(); j++) {
			Stack<Character> stack = arr.get(j);
			if(stack.size() > 0) {
				System.out.println(-1);
				return ;
			}
		}
		System.out.println(arr.size());
	}
	
}

+ Recent posts