728x90
난이도 : Lv. 2
풀이일 : 2409231
https://school.programmers.co.kr/learn/courses/30/lessons/12973
문제
1차 풀이
import java.util.Stack;
class Solution
{
public int solution(String s)
{
int answer = 0;
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char alphabet = s.charAt(i);
if (!stack.isEmpty() && stack.peek() == alphabet) {
stack.pop();
} else {
stack.push(alphabet);
}
}
if (stack.isEmpty()) {
answer = 1;
}
return answer;
}
}
- stack : 문자열 s의 각 글자를 담을 스택
- for 반복문 : 문자열 s의 길이만큼 반복한다.
- 만약, 스택이 비어있지 않고, 스택의 마지막 요소가 현재 알파벳과 같다면 스택의 마지막 요소 삭제
- 스택이 비어있거나, 스택의 마지막 요소가 현재 알파벳과 다르다면 현재 알파벳을 스택에 추가
- 반복문 종료 후, 스택이 비어있다면 정답은 1, 아니라면 초기화 했던대로 0이 된다.
2차 풀이
import java.util.Stack;
class Solution
{
public int solution(String s)
{
int answer = -1;
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char alphabet = s.charAt(i);
if (!stack.isEmpty() && stack.peek() == alphabet) {
stack.pop();
} else {
stack.push(alphabet);
}
}
answer = stack.isEmpty() ? 1 : 0;
return answer;
}
}
변화
- 초기에 주어진 answer를 변경하지 않고, 비어있는지 확인 후 숫자 할당 시 삼항연산자를 사용했다.
- 파이썬으로 알고리즘 풀 때 더 자주 쓰던 방식이라서 생각나서 해봤다.
배운점
- Stack<Character> stack = new Stack<>();
- 처음에는 Stackchar>로 작성하였는데 에러가 발생하였다.
- 자바의 제네릭 타입은 참조형만 사용할 수 있는데, 기본형 char를 사용해서 에러가 발생하였다고 원인을 파악하였다.
- char의 래퍼 클래스인 Character를 사용해서 해결하였다.
느낀점
- 파이썬이 쉽긴 쉽다ㅠ
'알고리즘 > Lv. 2' 카테고리의 다른 글
프로그래머스 131536 재구매가 일어난 상품과 회원리스트 구하기 SQL 풀이 (0) | 2024.10.07 |
---|---|
프로그래머스 284527 조건에 맞는 사원 정보 조회하기 SQL 풀이 (1) | 2024.10.02 |
프로그래머스 298518 특정 물고기를 잡은 총 수 구하기 SQL 풀이 (0) | 2024.10.01 |
프로그래머스 12981 영어 끝말잇기 자바 풀이 (0) | 2024.09.21 |
프로그래머스 12939 최댓값과 최솟값 자바 풀이 (0) | 2024.09.20 |