https://swexpertacademy.com/main/solvingProblem/solvingProblem.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
스택으로 풀면 좋을것같아서 스택으로 풀어보았다
연속되는 값들을 소거하면 되니까 스택에서 peek한 값과 입력값의 한 문자씩을 비교하며
같으면 pop하고 Push는 생략, 다르다면 그냥 Push하도록 한다
그러면 스택에 남은 값들이 비밀번호가 될 텐데
스택에서 하나씩 출력하면 역순이 되므로 StringBuilder를 이용해 reverse함수를 이용해 다시 순서대로 해준다
풀이코드
package D3;
import java.io.*;
import java.util.Stack;
import java.util.StringTokenizer;
public class SW_1234 { //SWEA 비밀번호 문제
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Stack<Character> stack = new Stack<Character>(); //char라고 적으면 안된다..잊지말기
StringBuilder sb;
int length; //번호 총길이
String code; //정제되기 전의 번호
for (int i = 1; i <= 10; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
length = Integer.parseInt(st.nextToken());
code = st.nextToken();
String str;
sb = new StringBuilder();
for (int j = 0; j < length; j++) {
if (j == 0) { //첫번째는 우선 push만한다 peek하면에러나니까
stack.push(code.charAt(j));
continue;
}
if (!stack.isEmpty() && stack.peek() == code.charAt(j)) { //stack의 top값과 현재값이 같으면 pop해 없애고 push안한다
stack.pop();
} else { //다르면 push하고 넘어감
stack.push(code.charAt(j));
}
}
while(!stack.isEmpty()) {
sb.append(stack.pop());
}
str = sb.reverse().toString(); //String으로 바꿔줘야함! 역순으로 바꾼다 스택이라 거꾸로되니까..
bw.write("#" + i + " " + str);
bw.newLine();
}
bw.flush();
bw.close();
}
}
'알고리즘 > SWExpert알고리즘' 카테고리의 다른 글
[SWEA] D2 - 1954번 달팽이 문제 (0) | 2023.04.29 |
---|---|
[SW Expert Academy] 1244번 - 최대 상금 문제(시간초과 미해결..) (0) | 2023.04.29 |
[SWEA] 1289번 - 원재의 메모리 복구하기 문제 (0) | 2023.04.22 |
[SWEA] D3 - 1491번 원재의 벽 꾸미기 문제 (1) | 2023.04.17 |
[SW Expert Academy] 1206번 - View(조망권) 문제 (0) | 2023.03.20 |