반응형
🔍 문제 요약
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
여는 괄호와 닫는 괄호로 이루어진 문자열 s가 있을 때 열고 닫는 것은 항상 짝을 이루어야 한다는 규칙이 있다고 한다. 이 때 바르게 짝지어진 경우면 true 아니면 false를 반환하는 문제
🧠 나의 접근 방식과 시행착오
한 6분 걸린 문제. 기존에도 비슷한 문제를 풀어본 기억이 있었던 단골 유형 문제라 기억하고 있는 것을 활용하여 빠르게 해결하였다. 짝을 이루어야 한다는 점에서 간단하게 스택에 넣고 빼는 형태로 풀었다.
/// <summary>
/// 올바른 괄호
/// https://school.programmers.co.kr/learn/courses/30/lessons/12909
/// </summary>
public bool solution(string s)
{
// (를 쌓다가 )로 뺄때 )가 더 많이 나오면 안됨
Stack<char> openStack = new Stack<char>();
foreach (var c in s)
{
if (c == ')')
{
if (openStack.Count == 0)
{
return false;
}
openStack.Pop();
}
else if (c == '(')
{
openStack.Push(c);
}
}
return openStack.Count == 0;
}
✅ 풀이 코드
가독성을 고려한 케이스 하나와 Stack을 쓰지 못하는 상황일 때의 문제 해결법을 피드백으로 주었다. (문제에서는 (와 )만 존재하기 때문에 개수로 구별해도 가능) 확장성을 고려한다면 Stack이 더 낫긴 하다.
foreach (var c in s)
{
if (c == '(')
{
openStack.Push(c);
}
else // c == ')'
{
if (openStack.Count == 0) return false;
openStack.Pop();
}
}
int count = 0;
foreach (var c in s)
{
count += (c == '(') ? 1 : -1;
if (count < 0) return false; // ')'가 먼저 나올 경우
}
return count == 0;
🔄 정리
operator 처리 등의 문제를 다루다 보면 자주 나오는 문제이기에 한번 풀어보면 다음에는 쉽게 풀 수 있는 유형이긴 하다. Stack을 쓰는 것도 잘 다루면 다른 문제들에서도 유용히 쓸 수 있다.
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[Lv.2] N개의 최소공배수 [프로그래머스_코딩테스트] [수학, 유클리드 호제법] [30분] (1) | 2025.06.24 |
---|---|
[Lv.0] 인덱스 바꾸기 [프로그래머스_코딩테스트] [문자열] [10분] (2) | 2025.06.24 |
[Lv.0] 대문자와 소문자 [프로그래머스_코딩테스트] [문자열] [10분] (0) | 2025.06.23 |
[Lv.0] 최댓값 만들기(1) [프로그래머스_코딩테스트] [정렬, 수학] [10분] (0) | 2025.06.22 |
[Lv.0] 문자열 계산하기 [프로그래머스_코딩테스트] [구현] [10분] (0) | 2025.06.20 |