반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


1. [SW expert Academy] SWEA 1234번 비밀번호 자바(Java)

1) 난이도 : D3

 

2) 문제번호 : 1234번

 

3) 문제 출처

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

 

SW Expert Academy

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

swexpertacademy.com

 

2. 문제

평소에 잔머리가 발달하고 게으른 철수는 비밀번호를 기억하는 것이 너무 귀찮았습니다.

적어서 가지고 다니고 싶지만 누가 볼까봐 걱정입니다. 한가지 생각을 해냅니다.
 
0~9로 이루어진 번호 문자열에서 같은 번호로 붙어있는 쌍들을 소거하고 남은 번호를 비밀번호로 만드는 것입니다.

번호 쌍이 소거되고 소거된 번호 쌍의 좌우 번호가 같은 번호이면 또 소거 할 수 있습니다.

예를 들어 아래의 번호 열을 철수의 방법으로 소거하고 알아낸 비밀 번호입니다.
 

 

 

3. 제약사항

 

4. 입력

10개의 테스트 케이스가 10줄에 걸쳐, 한 줄에 테스트 케이스 하나씩 제공된다.

각 테스트 케이스는 우선 문자열이 포함하는 문자의 총 수가 주어지고, 공백을 둔 다음 번호 문자열이 공백 없이 제공된다.

문자열은 0~9로 구성되며 문자열의 길이 N은 10≤N≤100이다. 비밀번호의 길이는 문자열의 길이보다 작다.

 

5. 출력

#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스에 대한 답(비밀번호)을 출력한다.

 

6. 풀이

- 앞과 뒤의 값이 같으면 삭제하고 양 옆의 값이 또 같으면 삭제하니까, ArrayList를 구현하여 앞과 뒤가 같으면 삭제하고, 다시 처음부터 순차 탐색하여 앞과 뒤가 같으면 삭제.

7. 소스 코드

import java.util.*;

public class Solution {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		for (int tc = 1; tc <= 10; tc++) {
			int N = sc.nextInt(); // 글자 수
			ArrayList<String> List = new ArrayList<>();

			String a = sc.next();

			for (int i = 0; i < N; i++)
				List.add(a.substring(i, i + 1));

			int count = 0;
			
			//처음부터 값이 같으면 삭제하고 다시 처음부터 순차 탐색
			while (true) {
				if (count == List.size() - 1)
					break;
				if (List.get(count).equals(List.get(count + 1))) {
					List.remove(count);
					List.remove(count);
					count = 0;
				} else
					count++;
			}
			
			//출력
			System.out.printf("#%d ",tc);
			for (String c : List) System.out.print(c);
			System.out.println();
		}
	}
}

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기