문제
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
설명

입출력

나의 풀이
풀이 과정
가장 중요하게 생각해야 할 것은 "("와 ")"이 짝에 맞게 있는지이다.
일단 입력으로 들어온 문자열 s를 for 문으로 돌면서 charAt으로 쪼갠 후 변수 c에 담는다.
스택 안에는 무조건 "(" (왼쪽 괄호)만 들어간다고 생각하면 된다.
c가 "(" 이면 스택에 넣고 c가 ")"이면 스택 안의 "("와 짝을 맞추기 위해 pop() 메서드로 "(" 빼준다.
s = "(())"일 때 모든 for 문을 실행한 후 스택이 비어있으므로 true가 리턴되고
s = "(((())"일 때 모든 for 문을 실행한 후 스택에는 "(("이 남아있으므로(스택이 비어있지 않으므로) false가 리턴된다.
위의 설명을 바탕으로 코드를 구현하였다.
import java.util.*;
class Solution {
boolean solution(String s) {
Stack<String> st = new Stack<String>();
for (int i=0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(') {
st.push("(");
} else {
st.pop();
}
}
return st.empty();
}
}
하지만 위의 코드를 실행하면!

EmptyStackException이 발생한다.
이유는
만약 s = "(())))"일 때 "(" 2개를 스택에 넣고 ")" 2개로 스택에서 "("를 다 뽑았을 때
스택은 비어있는데 ")"로 인해서 pop() 메서드를 했을 때 예외가 발생하는 것이다.
예외처리리는 try/catch 또는 throws로 처리해 줄 수 있다.
try/catch를 사용해서 catch에 걸릴때는 올바른 괄호가 아니게 되므로 바로 false를 리턴해준다.
아래는 예외처리를 적용한 코드이다.
import java.util.*;
class Solution {
boolean solution(String s) {
try {
Stack<String> st = new Stack<String>();
for (int i=0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(') {
st.push("(");
} else {
st.pop();
}
}
return st.empty();
} catch (EmptyStackException e) {
return false;
}
}
}
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] (JAVA) Lv3 네트워크 (0) | 2023.07.07 |
---|---|
[프로그래머스] (JAVA) Lv2 게임 맵 최단거리 (2) | 2023.07.06 |
[프로그래머스] (JAVA) Lv1 같은 숫자는 싫어 (0) | 2023.07.02 |
[프로그래머스] (JAVA) Lv1 폰켓몬 (0) | 2023.07.02 |
[프로그래머스] (JAVA) Lv2 더 맵게 (0) | 2023.07.02 |
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
설명

입출력

나의 풀이
풀이 과정
가장 중요하게 생각해야 할 것은 "("와 ")"이 짝에 맞게 있는지이다.
일단 입력으로 들어온 문자열 s를 for 문으로 돌면서 charAt으로 쪼갠 후 변수 c에 담는다.
스택 안에는 무조건 "(" (왼쪽 괄호)만 들어간다고 생각하면 된다.
c가 "(" 이면 스택에 넣고 c가 ")"이면 스택 안의 "("와 짝을 맞추기 위해 pop() 메서드로 "(" 빼준다.
s = "(())"일 때 모든 for 문을 실행한 후 스택이 비어있으므로 true가 리턴되고
s = "(((())"일 때 모든 for 문을 실행한 후 스택에는 "(("이 남아있으므로(스택이 비어있지 않으므로) false가 리턴된다.
위의 설명을 바탕으로 코드를 구현하였다.
import java.util.*;
class Solution {
boolean solution(String s) {
Stack<String> st = new Stack<String>();
for (int i=0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(') {
st.push("(");
} else {
st.pop();
}
}
return st.empty();
}
}
하지만 위의 코드를 실행하면!

EmptyStackException이 발생한다.
이유는
만약 s = "(())))"일 때 "(" 2개를 스택에 넣고 ")" 2개로 스택에서 "("를 다 뽑았을 때
스택은 비어있는데 ")"로 인해서 pop() 메서드를 했을 때 예외가 발생하는 것이다.
예외처리리는 try/catch 또는 throws로 처리해 줄 수 있다.
try/catch를 사용해서 catch에 걸릴때는 올바른 괄호가 아니게 되므로 바로 false를 리턴해준다.
아래는 예외처리를 적용한 코드이다.
import java.util.*;
class Solution {
boolean solution(String s) {
try {
Stack<String> st = new Stack<String>();
for (int i=0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(') {
st.push("(");
} else {
st.pop();
}
}
return st.empty();
} catch (EmptyStackException e) {
return false;
}
}
}
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] (JAVA) Lv3 네트워크 (0) | 2023.07.07 |
---|---|
[프로그래머스] (JAVA) Lv2 게임 맵 최단거리 (2) | 2023.07.06 |
[프로그래머스] (JAVA) Lv1 같은 숫자는 싫어 (0) | 2023.07.02 |
[프로그래머스] (JAVA) Lv1 폰켓몬 (0) | 2023.07.02 |
[프로그래머스] (JAVA) Lv2 더 맵게 (0) | 2023.07.02 |