728x90
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예

입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
풀이
using System;
public class Solution {
public bool solution(string s) {
bool answer = true;
int count = 0;
for(int i =0; i<s.Length; i++)
{
if(s[0] == ')')
{
return false;
break;
}
else
{
if(s[i] == '(')
{
count++;
}
else
{
count--;
}
}
}
if(count != 0)
{
answer = false;
}
return answer;
}
}
: 처음엔 괄호 순서를 어떻게 하면 될까라고 생각하다가 count라는 변수를 설정하여
'(' <--- 더하기
')' <--- 뺴기
하여 0이 나오면 true, 그게 아니면 false를 반환해주었다.
더불어 처음이 ')'이면 안되기 때문에 예외처리를 맨 앞에 해주었다.
그러나...


왤까요ㅎㅎ,,,
생각을 한 끝에!!
최종 풀이
using System;
public class Solution {
public bool solution(string s) {
bool answer = true;
int count = 0;
//..시작이 ')'이면 안 됨
if(s[0] == ')')
{
return false;
}
for(int i =0; i<s.Length; i++)
{
if(s[i] == '(')
{
count++;
}
else
{
count--;
//..음수 => 짝이 맞지 않음
if(count < 0)
{
return false;
}
}
//..0이 아니면 짝이 맞지 않음
answer = (count == 0) ? true : false;
}
return answer;
}
}
1. 맨 앞이 ')' 이면 안 됨
2. 중간에 짝이 안 맞으면 안 됨 ( ')'가 더 많을 경우 안됨!)
3. 마지막 순서까지 짝이 안 맞으면 안 됨 (count 수가 음수가 되면 안 됨)
레벨2 쉽지 않다,,,
(스택/큐 문제였지만 굳이 써야하나 싶어서 위와 같이 풀이했다)
'공부 > 코딩테스트' 카테고리의 다른 글
프로그래머스/C#/Lv.2 - JadenCase 문자열 만들기 (0) | 2024.06.24 |
---|---|
프로그래머스/C#/Lv.2 - 최솟값 만들기 (0) | 2024.06.21 |
프로그래머스/C#/Lv.2 - 최댓값과 최솟값 (0) | 2024.06.18 |
프로그래머스/C# - 최소 직사각형 (0) | 2024.06.18 |
프로그래머스/C# - 명예의 전당(1) (0) | 2024.06.17 |