우당탕탕 개발일지

[SWEA] 1234. [S/W 문제해결 기본] 10일차 - 비밀번호(Java, D3) 본문

코테/SW Expert Academy

[SWEA] 1234. [S/W 문제해결 기본] 10일차 - 비밀번호(Java, D3)

ujin302 2024. 5. 13. 18:08
반응형

문제

1238099084 라는 문자열이 주어진다. 

아래 그림과 같이 연속으로 반복되는 동일한 숫자가 있을 경우 소거한다. 

 

더이상 소거할 숫자가 없을 때까지 진행하여 남은 문자열을 반환하여라 

 

 

입출력 예

 

 

풀이

해당 문제는 연속된 동일한 숫자 소거하는 작업을 반복하는 부분이 중요한다.

따라서 해당 작업을 진행하는 함수 removeNum 을 만들어 while문 안에서 호출하도록 설계했다. 

 

 

removeNum 함수는 매개변수로 받은 문자열에 규칙에 따라 소거해야하는 문자를 모두 소거한 후,

결과 문자열을 반환한다. 

 

그 후, 결과 문자열의 길이와 이전 문자열의 길이가 동일한지 확인한다.

길이가 같다면 더이상 소거할 문자가 없는 것으로 판단하여 결과 값으로 취급한다. 

 

 

removeNum 함수 

 

매개변수로 받은 문자열의 문자를 하나씩 Queue에 저장한다. 

Queue에서 첫번째 원소를 a에 두번째 원소를 b에 저장한다. 

 

a와 b가 동일한 경우 소거해야 하는 경우로 판단하여 Queue에서 b를 소거한다. 

동일하지 않을 경우 pw 문자열에 a을 저장한다. 

그 이유는 a는 소거해야할 문자가 아니고 b는 그 다음 문자와 비교하여 소거할지 말지에 대해 결정해야여 하기 때문이다. 

 

Queue가 비어있지 않을 경우 남아 있는 모든 원소를 pw 문자열에 저장한다. 

 

 

코드

import java.util.*;

class Solution
{
    public String removeNum(String strNum) {
		String pw="";
		char[] charNum = strNum.toCharArray();
		Queue<Integer> numQueue = new LinkedList<>();
		
		for(char c : charNum) {
			numQueue.add(Character.getNumericValue(c));
		}
		
		while(numQueue.size() >= 2) {
			int a = numQueue.poll();
			int b = numQueue.peek();
			
			if(a==b) {
				numQueue.poll();
			}else {
				pw += a+"";
			}
		}
		
		while(!numQueue.isEmpty()) {
			pw += numQueue.poll() + ""; 
		}

		return pw;
	}
    
	public static void main(String args[]) throws Exception
	{
		Scanner sc = new Scanner(System.in);
		int t=10;
        Solution d = new Solution();
        
		for(int tc =1; tc<1+t; tc++) {
			// 1. 설정 
			String pw="";
			int len= sc.nextInt();
			String numStr = sc.next();
			
			// 2. 반복된 숫자 제거 
			while(true) {
				String tempPW = d.removeNum(numStr);
				if(tempPW.length() == len) {
					pw = tempPW;
					break;
				}
				len = tempPW.length();
				numStr = tempPW;
			}
			
			System.out.println("#"+tc+ " " + pw);
		}
	}
}

 

 

SWEA 문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14_DEKAJcCFAYD

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

반응형