https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
| s | answer |
| "()()" | true |
| "(())()" | true |
| ")()(" | false |
| "(()(" | false |
입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
문제 해결을 위한 과정
이 문제는 스택으로 풀 수 있지만 각 괄호를 +1, -1로 대체한다면 조금 더 효율적으로 해결할 수 있습니다.
- 카운팅 변수 설정: 여는 괄호를 담을 스택 대신, 숫자를 셀 number 변수를 0으로 초기화합니다.
- 괄호 순회: 문자열을 한 글자씩 확인합니다.
- ( 를 만나면: 숫자를 +1 합니다.
- ) 를 만나면: 숫자를 -1 합니다.
- 탈출 조건 : 만약 루프 중간에 number가 음수가 된다면? 이것은 괄호의 짝이 맞지 않는 경우이므로 즉시 false를 반환합니다.
- 최종 확인: 모든 루프가 끝난 뒤 number가 딱 0이어야만 모든 짝이 맞은 것입니다. 0이 아니라면 false를 반환합니다.
소스코드
import java.util.*;
class Solution {
boolean solution(String s) {
boolean answer = true;
int number = 0;
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '(') {
number += 1;
} else {
number -= 1;
}
if(number < 0)
return false;
}
if(number != 0)
return false;
return answer;
}
}'알고리즘 > 프로그래머스' 카테고리의 다른 글
| 프로그래머스 다리를 지나는 트럭 (Level2 Java) (0) | 2026.03.15 |
|---|---|
| 프로그래머스 프로세스 (Level 2 Java) (0) | 2026.03.15 |
| 프로그래머스 기능개발 (Level2 Java) (0) | 2026.03.14 |
| 프로그래머스 같은 숫자는 싫어 (Level1 Java) (0) | 2026.03.14 |
| 프로그래머스 베스트앨범(Level 3 Java) (0) | 2026.03.12 |
