https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Level 2. 올바른 괄호
접근 방식
제일 먼저 나오는 괄호가 '('가 아닌 ')'라면 false를 내야 한다.
그 후, 문자열의 길이만큼 반복문 안에서 '('가 나오는 개수와 ')'가 나오는 개수를 세아린다.
--> 이때, '('의 개수보다 ')'의 개수가 더 많이 나온다면 해당 문자열은 올바른 괄호가 아니므로 false return.
시행착오
class Solution {
boolean solution(String s) {
boolean answer = true;
int l = s.length()-s.replace(String.valueOf('('),"").length(); //'('개수
int r = s.length()-s.replace(String.valueOf(')'),"").length(); //')'개수
if(s.charAt(0)==')') return false; //첫 글자가 ')'면 false
if(l!=r) return false; //개수 다르면 false
return answer;
}
}
처음에는 개수만 맞추면 올바른 괄호인 줄 알았는데, 풀고보니까 예제 중 4개가 틀렸다고 나왔다.
생각해보니까, ()))(( 이런 식으로 '('보다 ')'가 더 많이 나오는 순간이 발생하면 올바른 괄호가 아니었다.
최종 코드
class Solution {
boolean solution(String s) {
boolean answer = true;
int l = 0, r =0;
if(s.charAt(0)==')') return false; //첫 괄호가 )면 false
for(int i=0; i<s.length(); i++){
if(l<r)
return false; // (보다 )개수가 더 많아지는 순간 false
if(s.charAt(i)=='(') // 개수 세아리기
l++;
else if(s.charAt(i)==')')
r++;
}
if(l!=r) return false; //짝 개수 안 맞으면 false
return answer;
}
}
이런 식으로, 문자열 돌면서 개수 세아려서 ')'가 더 많이 나오는 순간 false를 반환하니까 정답이었다.
고찰
생각보다 되게 빨리 푼 문제였다. 문제를 다 풀고나니까, 스택/큐 관련 문제란 걸 깨달았다..
하지만 굳이 스택/큐를 구현하지 않고 단순하게 문제를 풀 수 있었다! 사람들이 쓴 글 보니까, 스택/큐로 구현하면 효율성을 만족하지 못한다는 글을 봤다. 다른 사람들이 푼 결과도 많이 찾아보면 좋을 것 같다.
'알고리즘 > Java' 카테고리의 다른 글
[프로그래머스] Java - 숫자의 표현 (0) | 2023.04.16 |
---|---|
[프로그래머스] Java - 이진 변환 반복하기 (0) | 2023.04.09 |
[프로그래머스] JAVA - 최솟값 만들기 (0) | 2023.04.06 |
[프로그래머스] JAVA - JadenCase 문자열 만들기 (0) | 2023.04.04 |
[프로그래머스] JAVA - 성격 유형 검사하기 (0) | 2023.02.17 |