안녕하세요.
오늘은 프로그래머스의 코딩테스트 lv.2 단계 중에 올바른 괄호 공부해보겠습니다.
언어는 Java로 구현하였습니다.
문제 설명
괄호가 바르게 짝지어졌다는 것은 '('문자로 열렸으면 반드시 짝지어서 ')'문자로 닫혀야 한다는 뜻입니다.
예를 들어
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한 사항
입출력 예
s | answer |
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
문제 풀이
올바른 괄호인지 확인하기 위해 몇 가지 조건을 만들었습니다.
매개변수 s가 올바른 괄호인지 확인하기 위해 반복문을 통해 한 글자씩 가져와서 확인하였습니다.
조건을 맞추기 위한 int 변수(num)를 선언하고 가지고 온 글자가 '('이면 num을 증가시키고 ')'이면 num을 감소시켰습니다.
num이 0이면 '('가 있어야 하고 num이 0보다 작으면 올바른 괄호가 아닌 것으로 판단하였습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
class Solution {
boolean solution(String s) {
int num = 0;
for(int i = 0; i < s.length(); i++)
{
if(num == 0)
{
if(s.charAt(i) == '(')
{
num++;
}
else
{
return false;
}
}
else if(0 < num)
{
if(s.charAt(i) == '(')
{
num++;
}
else
{
num—;
}
}
else
{
return false;
}
}
boolean answer = (num == 0) ? true : false;
return answer;
}
}
|
추가 풀이
위와 같은 방법으로 구현하고 난 뒤에 Stack을 공부하였는데 Stack을 활용하면 더욱 간편하게 해결이 가능할 것 같아서 Stack을 사용한 방법으로도 구현하였습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import java.util.Stack;
class Solution {
boolean solution(String s) {
Stack<Character> stack = new Stack<Character>();
try
{
for(int i = 0; i < s.length(); i++)
{
if(s.charAt(i) == '(')
{
stack.push('(');
}
else
{
stack.pop();
}
}
return stack.empty();
}
catch(Exception e)
{
return false;
}
}
}
|
Stack을 선언하고 반복문을 통해 매개변수 s를 한 글자씩 가져와서 '('이면 stack에 추가하고 ')'이면 스택의 최상단을 제거하였습니다. 반복문이 끝난 뒤에 empty() 함수로 스택에 값을 확인하여 없다면 true, 있다면 false를 반환하였습니다.
그리고 스택에 값이 없는데 최상단을 제거하면 에러가 발생하기 때문에 try-catch로 에러 시에 false를 반환하였습니다.
사용 함수
마무리 정리
문제가 요구하는 것을 이해하고 그에 맞도록 조건을 설정하는 데 시간이 많이 소요되었습니다.
설정한 조건을 구현하기 위해서 반복문과 조건문을 사용하였는데 Stack을 사용하니 이전보다 훨씬 간단하게 구현할 수 있었습니다.
이상으로 프로그래머스 Lv.2 - 올바른 괄호 공부를 마치겠습니다.
감사합니다.
[프로그래머스] Lv.0 - 분수의 덧셈 (0) | 2025.04.04 |
---|---|
[프로그래머스] Lv.0 - 인덱스 바꾸기 (0) | 2023.03.09 |
[프로그래머스] Lv.0 - 직각삼각형 출력하기 (0) | 2023.03.02 |
[프로그래머스] Lv.0 - n의 배수 고르기 (0) | 2023.03.01 |
[프로그래머스] Lv.1 - 문자열 내림차순으로 정렬하기 (0) | 2023.02.26 |
댓글 영역