1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 접근 방식
Stack으로 문제를 접근하면 어렵지 않게 풀 수 있다. 다만 for문이 끝나고 stack이 비워져 있는지 확인을 해야 한다.
그리고 Stack을 이용하지 않아도 풀 수 있는 방법이 있어 가져와 봤다.
class Solution {
boolean solution(String s) {
boolean answer = false;
int count = 0;
for(int i = 0; i<s.length();i++){
if(s.charAt(i) == '('){
count++;
}
if(s.charAt(i) == ')'){
count--;
}
if(count < 0){
break;
}
}
if(count == 0){
answer = true;
}
return answer;
}
}
// 출처 https://school.programmers.co.kr/learn/courses/30/lessons/12909/solution_groups?language=java
Stack을 쓰는 것보다 위의 방식을 활용하는 점이 코드가 더 직관적이고 알아 보기가 쉽다. 또한 문자열의 길이가 늘어날 수 록 메모리를 많이 차지할텐데 단순히 count변수의 값을 조정하는 것만으로 해당 문제를 해결한다.
3. 구현
import java.util.*;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<Character> stack = new Stack<Character>();
for (int i=0; i<s.length(); i++) {
if (s.charAt(i) == ')') {
if (stack.isEmpty()) {
answer = false;
break;
}
stack.pop();
continue;
}
stack.push('(');
}
if (!stack.isEmpty()) {
answer = false;
}
return answer;
}
}
4. 정리
언젠가 '어려운 로직을 알기 쉬운 코드로 작성하는 것이 진짜 실력이다.' 와 같은 글을 본적이 있다. 해당 글이 깊게 와닿는 문제였다.
'프로그래머스' 카테고리의 다른 글
프로그래머스 - 다음 큰 숫자 (0) | 2023.06.18 |
---|---|
프로그래머스 - 가장 큰 정사각형 찾기 (0) | 2023.06.01 |
프로그래머스 - 2*n 타일링 (1) | 2023.05.22 |
프로그래머스 - 게임 맵 최단거리 (0) | 2023.05.09 |
프로그래머스 - 디펜스 게임 (0) | 2023.05.08 |