[JAVA] SWEA 1234 - 비밀번호

hyng·2022년 1월 25일
0

SWEA

목록 보기
18/78

solution

queue 두 개를 이용해서 같은 번호로 붙어있는 쌍을 제거한다.
두 개의 수를 비교해 보고 같지 않다면 temp 큐에 넣고 만약 같다면 두 개의 수를 모두 queue에서 제거하는 식으로 짜면 된다.
queue->temp->queue.. 이런 식으로 옮겨가며 쌍 제거를 반복하는데 만약 쌍이 하나도 나오지 않았다면 더 이상 쌍을 찾을 필요가 없기 때문에 check 값이 false가 되면 반복문을 빠져나온다.

code

import java.util.*;
class Solution
{
	public static void main(String args[]) throws Exception
	{
		Scanner sc = new Scanner(System.in);
        StringBuffer sb = new StringBuffer();


        int T = 10;
        for(int tc=1; tc<=T; tc++){
            sb.append("#").append(tc).append(" ");

            String input[] = sc.nextLine().split(" ");
            String str = input[1];

            sb.append(findPassword(str)).append("\n");
      
        }
        System.out.println(sb);
	}
    static String findPassword(String str){
        Queue<Integer> result = null;
        Queue<Integer> queue1 = new LinkedList<>();
        Queue<Integer> queue2 = new LinkedList<>();

        boolean check = true;
        int order = 0;

        for(int i=0; i<str.length(); i++){
            queue1.add(str.charAt(i)-'0');
        }
        while(check){
           if(order == 0){
               order = 1;
               check = findPair(queue1, queue2);
               result = queue2;
           }else{
               order = 0;
               check = findPair(queue2, queue1);
               result = queue1;
           }
        }
        StringBuffer sb = new StringBuffer();
        while(!result.isEmpty()){
            sb.append(result.poll());
        }
        return sb.toString();
    }
    static boolean findPair(Queue<Integer> queue, Queue<Integer> temp){
        boolean ret = false;
        while(!queue.isEmpty()){
            int p = queue.poll();
            //마지막 남은 숫자였음.
            if(queue.size() == 0){
                temp.add(p);
                continue;
            }
            int cmp = queue.peek();
            if(p == cmp){
                ret = true;
                queue.poll();
            }else{
                temp.add(p);
            }
        }
        return ret;
    }
}
profile
공부하고 알게 된 내용을 기록하는 블로그

0개의 댓글