문제 설명
S는 알파벳으로 이루어진 문자열입니다.
순서대로 문자열을 확인하여, 해당 문자열에서 2회 연속으로 동일한 문자가 나타나면, 해당 두 문자를 소거합니다.
소거한뒤에 나온 문자열에서 다시 연속해서 나오는 알파벳을 소거하는 작업을 더 이상 작업할 것이 없을 때까지 반복합니다.
이때 최종 문자열이 완전히 소거되어 빈 문자열이라면 1을 반환하고, 알파벳이 남아있으면 0을 반환하는 프로그램을 구현하세요.
입력 형식
· S: 알파벳으로 이루어진 문자열
출력 형식
· 문자열 소거를 반복한 후 빈 문자열 여부를 1 또는 0의 정수로 반환
제약 사항
· 0 < S.length <= 100
입출력 예시
· 입력
· S = "ABBA"
· 출력 : 1
· 설명: "ABBA" → "AA" → "" 와 같이 빈 문자열이 되므로 1을 반환
작성 코드
(20/20)
import java.util.Stack;
class Solution {
public int solution(String S) {
int answer = 0;
Stack<Character> word = new Stack<>();
// S 문자열을 char 배열로 변환하고, 배열의 모든 요소에 대해 반복문을 실행한다.
for (char i : S.toCharArray()) {
// word 스택이 비어있거나 스택의 맨 위 요소와 현재 문자 i가 다를 경우 i를 push
if(word.isEmpty() || word.peek() != i) word.push(i);
else word.pop();
}
if(word.isEmpty()) answer = 1;
return answer;
}
public static void main(String[] args) {
Solution st = new Solution();
String S = "ABBA";
System.out.println(st.solution(S));
}
}
정답 코드
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(String S) {
List<Character> chars = new ArrayList<>();
for (int i = 0; i < S.length(); i++) {
if (!chars.isEmpty() &&
chars.get(chars.size() - 1) == S.charAt(i)) {
chars.remove(chars.size() - 1);
continue;
}
chars.add(S.charAt(i));
}
if (chars.isEmpty()) {
return 1;
}
return 0;
}
}
'연습 코딩테스트' 카테고리의 다른 글
연습문제 1-3(5) 짜장면 상금 총금액과 우승자 (0) | 2023.04.01 |
---|---|
연습문제 1-3(4) 문자열 계산식 (0) | 2023.04.01 |
연습문제 1-3(2) 괄호 짝 판단하기 (0) | 2023.04.01 |
연습문제 1-3(1) 중복 문자 제거 (0) | 2023.04.01 |
연습문제 1-2(5) 배열 0에서 가장 가까운 값 (0) | 2023.03.30 |