* 순서
- 문제
- 문제 설명
- 문제 목표
- 문제 풀이
- 최종 코드
- 포인트
- 다른 사람 코드
- 문제
- 문제 설명
'(' 문자와 ')' 문자로 이루어진 문자열 s가 주어진다.
'(' 문자로 시작했으면 짝지어서 ')' 문자로 끝나면 true 반환, 그렇지 않으면 false를 반환한다.
- 문제 목표
'(' 문자로 시작했으면 짝지어서 ')' 문자로 끝나는지 확인한다.
- 문제 풀이
1. '(', ')' 올바른 짝인지 확인하기 위해 Stack을 이용한다.
2. '(' 문자면 Stack에 넣는다.
3. ')' 문자일 경우, Stack이 비어 있지 않으면 Stack 제일 위 문자열이 '('인지 확인한다. '('일 경우 Stack에서 꺼낸다.
4. ')'일 경우 Stack에 ')'을 넣는다.
5. ')' 문자일 경우, Stack이 비어있으니 false를 반환한다.
- 최종 코드
public static boolean solution(String s) {
//1. '(', ')' 올바른 짝인지 확인하기 위해 Stack을 이용한다.
Stack<Character> stack = new Stack<>();
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
//2. '(' 문자면 Stack에 넣는다.
if(c == '(') {
stack.push(c);
} else {
if(!stack.isEmpty()) {
//3. ')' 문자일 경우, Stack이 비어 있지 않으면 Stack 제일 위 문자열이 '('인지 확인한다.
//'('일 경우 Stack에서 꺼낸다.
if(stack.peek() == '(') {
stack.pop();
} else {
//4. ')'일 경우 Stack에 ')'을 넣는다.
stack.push(c);
}
} else {
//5. ')' 문자일 경우, Stack이 비어있으니 false를 반환한다.
return false;
}
}
}
//6. Stack이 비어 있다면 올바른 짝 확인을 한 것이므로 true를 반환한다.
if(stack.isEmpty()) {
return true;
}
//7. Stack이 비어 있지 않다면 올바른 짝 확인이 안된 것이므로 false를 반환한다.
return false;
}
- 포인트
Stack 개념에 대해 알고 있는지 혹은 개수의 접근으로 문제 접근했는지 여부이다.
- 다른 사람 코드
Stack을 사용하지 않고 푼 코드이다. Stack 개념을 알아야 풀 수 있다고 생각했지만 개수로 접근해도 문제를 풀 수 있었다.
문자 '('일 경우 count에 숫자를 하나씩 더하고
문자 ')'일 경우 count에 숫자를 하나씩 빼고 있다.
그리고 ')' 개수가 더 많아지면 count가 음수가 되므로 break로 for문을 나온다.
count 개수가 0일 경우 true를 반환하고 그렇지 않을 경우 count가 양수이거나 음수이면 올바른 문자짝이 아니므로 false가 반환되게 하였다.
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;
}
}
'Algorithm' 카테고리의 다른 글
[프로그래머스 Java] 할인 행사 Lv.2 (0) | 2023.09.19 |
---|---|
[프로그래머스 Java] 예상대진표 Lv.2 (0) | 2023.09.19 |
[프로그래머스 Java] 최소값 만들기 Lv.2 (0) | 2023.09.11 |
[프로그래머스 Java] JadenCase 문자열 만들기 Lv.2 (0) | 2023.09.05 |
[프로그래머스 Java] 추억 점수 Lv.1 (0) | 2023.09.05 |
댓글