티스토리 뷰
- 오전
- 운동
- 오후
- 코딩테스트
- 저녁
- 과제 - 슬롯기능 완성하기.
코딩테스트 - 올바른 괄호
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12909
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
s | answer |
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
내가 쓴 코드
스택이나 큐를 활용하라던데
솔직히 그 방법은 잘 몰라서 내 방식대로했다.
public bool solution(string s)
{
bool firstC;
bool lastC;
firstC = s[0] == '(' ? true : false;
lastC = s[s.Length - 1] == ')' ? true : false;
if (lastC && firstC) return true;
return false;
}
하지만 실패
효율성도 안좋다.
뭐가 문제일까 다시 보고 생각해봤는데
문제를 잘못이해했다.
그저 첫 괄호와 끝괄호만 맞으면 된다고 생각했다.
하지만 중간에 있는 괄호도 신경써야했다.
"()()()()))" 이러면 false가 되는 것이다.
using System.Collections.Generic;
public class Solution
{
public bool solution(string s)
{
Stack<char> stack = new Stack<char>();
foreach (char c in s)
{
if (c == '(')
{
stack.Push(c);
}
else
{
if (stack.Count == 0) return false;
stack.Pop();
}
}
return stack.Count == 0;
}
}
stack을 활용한 방법이다
stack을 만들고 "("일떄 push한다
아니라면 ")" 이므로 pop으로 뺀다.
만약 Count가 이미 0이 됐다면
이렇게 하면 짝이 맞을때 true를 보낼 수 있다.
하지만 using문도 추가해야하고 개인적으로 코드가 너무 길다 생각한다.
다른사람의 코드
public bool solution(string s)
{
int count = 0;
foreach (char c in s)
{
if (c == '(') count++;
else count--;
if (count < 0) return false; // 닫는 괄호가 먼저 나오는 경우
}
return count == 0; // 모든 괄호가 짝을 맞추면 0이어야 함
}
비슷한 방법이지만
굳이 Generic 를 쓰지 않아도 되면서 더 간단하다.
"("라면 1카운트를 올려주고 아니라면 count를 1빼준다
도중 count가 0보다 낮다면 짝이 안맞다는 뜻이기에 false를 return한다.
'코딩' 카테고리의 다른 글
개인개발_TIL_18일차(코딩테스트 - 동영상 재생기) (1) | 2025.03.26 |
---|---|
Failed to create Android keystore. Android SDK is not found or is invalid (0) | 2025.03.20 |