티스토리 뷰
1234. [S/W 문제해결 기본] 10일차 - 비밀번호
swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14_DEKAJcCFAYD
1. 어렵게 생각했지만 스택을 사용하니 쉽게 풀렸다!! 지웠던 위치를 기준으로 또다시 좌우가 대칭인지를 비교하기 때문에. stack의 top과 현재 원소를 비교하는 방식으로 풀 수 있다.
2. 스택을 그대로 출력하면 들어갔던 순서와 반대로 출력된다. 뒤집기 위해 또다른 스택을 만들어서 출력.
// 210206
import java.io.*;
import java.util.*;
public class Solution_D3_1234_비밀번호 {
static int N;
static Stack<Character> encrypt(String str) {
Stack<Character> stack = new Stack<Character>();
for (int i=0; i<N; i++) {
if (stack.isEmpty()) {
stack.push(str.charAt(i));
}
else if (stack.peek() == str.charAt(i)) {
stack.pop();
} else {
stack.push(str.charAt(i));
}
}
return stack;
}
static String reverse(Stack<Character> stack, int tc) {
Stack<Character> stack2 = new Stack<Character>();
while (!stack.isEmpty()) {
stack2.push(stack.pop());
}
StringBuilder sb = new StringBuilder();
sb.append("#" + tc + " ");
while (!stack2.isEmpty()) {
sb.append(stack2.pop());
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int tc=1; tc<=10; tc++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
N = Integer.parseInt(st.nextToken());
Stack<Character> pwStack = encrypt(st.nextToken());
System.out.println(reverse(pwStack, tc));
} // tc
}
}
3. 이건 검색하다 본 재밌는 코드
'코딩테스트 > SW Expert' 카테고리의 다른 글
[SWEA] 5215. 햄버거 다이어트 - 부분집합 (0) | 2021.02.09 |
---|---|
[SWEA] 1940. 가랏! RC카! (0) | 2021.02.08 |
[SWEA] 1223. [S/W 문제해결 기본] 6일차 - 계산기2 (0) | 2021.02.05 |
[SWEA] 1861. 정사각형 방 (0) | 2021.02.05 |
[SWEA] 3499. 퍼펙트 셔플 (0) | 2021.02.05 |
댓글