본문 바로가기
알고리즘문제풀이

[JAVA] SWEA 1234 비밀번호

by Hindsight.. 2020. 8. 16.

전체 코드

import java.util.Scanner;

public class SWEA_1234_비밀번호 {
	
	static int N;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] arr;
		String num;
		for(int test=1; test<=10; test++) {
			N = sc.nextInt();
			arr = new int[N];
			num = sc.next();
			for(int i=0; i<N; i++) {
				arr[i] = (int) num.charAt(i) - '0'; // char형을 정수형으로 변환
			}
			boolean chk; //모두 지울시 체크로 while문 탈출
			
			while(true) {
				chk = false;
				for(int i=0; i<N-1; i++) { // 모든 문자열 탐색
					if(arr[i] == arr[i+1]) { // 만약 자기자신과 뒤의 수가 같다면
						for(int j=i; j<N-2; j++) { //자기과 뒤의 수를 지우고, 뒤의 수들을 앞으로 땡겨온다.
							arr[j] = arr[j+2];
						}
						N-=2;// 그리고 N의 길이를 줄이고
						chk = true; //체크값을 true 로 변경
					}
				}
				if(!chk) break;
			}
			
			System.out.print("#"+test + " ");
			for(int i=0; i<N; i++) {
				System.out.print(arr[i]);
			}
			System.out.println();
		}
	}

}

 

문제 핵심 코드

boolean chk; //모두 지울시 체크로 while문 탈출
			
while(true) {
	chk = false;
	for(int i=0; i<N-1; i++) { // 모든 문자열 탐색
		if(arr[i] == arr[i+1]) { // 만약 자기자신과 뒤의 수가 같다면
			for(int j=i; j<N-2; j++) { //자기과 뒤의 수를 지우고, 뒤의 수들을 앞으로 땡겨온다.
				arr[j] = arr[j+2];
			}
			N-=2;// 그리고 N의 길이를 줄이고
			chk = true; //체크값을 true 로 변경
		}
	}
	if(!chk) break;
}

 

값을 따로 지우는것이 아닌 문자열 땡김을 반복해 같은 수들을 지워 간다.