728x90
( 연습문제 / 올바른 괄호 )
[문제]
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예시
s | answer |
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
[풀이]
이번 문제는 스텍을스택을 통해서 문제를 많이 풀지만 꼭 스택을 쓰지 않아도 됩니다.
step1 -> 먼저 정수 n을 선언후 0으로 초기화합니다.
step2 -> 문자열 s를 한 문자씩 탐색하며 '('이면 n을 증가시키고 ')'이면 감소시킵니다.
step3 -> '('가 생기기 전에 ')'가 생기면 n은 음수로 되기 때문에 하던 반복문을 중단하고 false를 return 해주면 됩니다.
step4 -> 만약 반복문에 모두 끝났고 n이 0이라면 괄호의 순서와 개수가 모두 올바르기 때문에 n == 0을 retrun 하여 0일 경우는 true를 아니면 false를 return 하도록 하면 정답입니다.
[코드]
자바
class Solution {
public boolean solution(String s) {
int n = 0;
for(int i = 0; i < s.length(); i++){
// '('이면 1증가 ')'이면 1감소
n += s.charAt(i) == '(' ? 1 : -1;
// n이 음수이면 false 반환
if(n < 0) return false;
}
// n==0이면 true 아니면 false
return n == 0;
}
}
코틀린
fun solution(s:String):Boolean{
// 결과가 0이면 true 아니면 false
return s.fold(0){acc, c ->
// acc의 결과가 음수로 가면 바로 false
if(acc < 0) return false
// '('이면 acc 1증가
else if(c == '(') acc + 1
// ')'이면 acc 1감소
else acc - 1
} == 0
}
제가 잘못 알고 있거나 잘못된 부분이 있을 경우 알려주시고 추가로 궁금한 점 있으신 분들도 댓글이나 메일 주시면 성실히 답변해 드리겠습니다.🧑🏻💻
감사합니다~😄
728x90
'Algorithm > level2' 카테고리의 다른 글
[ 프로그래머스 - Java & Kotlin ] [ 3차 ] 압축 ( 자바 & 코틀린 ) (0) | 2021.09.16 |
---|---|
[ 프로그래머스 - Java & Kotlin ] [ 3차 ] 파일명 정렬 ( 자바 & 코틀린 ) (0) | 2021.09.16 |
[ 프로그래머스 - Java & Kotlin ] [ 3차 ] n진수 게임 ( 자바 & 코틀린 ) (0) | 2021.09.16 |
[ 프로그래머스 - Java & Kotlin ] 다음 큰 숫자 ( 자바 & 코틀린 ) (0) | 2021.09.16 |
[ 프로그래머스 - Java & Kotlin ] 땅따먹기 ( 자바 & 코틀린 ) (0) | 2021.09.14 |