본문 바로가기
프로그래머스

괄호 회전하기 (C#)

by LemongO 2024. 5. 15.

📌프로그래머스 76502

💡풀이

  • string s를 char List로 만든다.
  • s의 길이만큼 반복검사
  • IsCorrect 메서드에서 올바른 괄호 짝인지 확인 후 맞으면 answer++
  • char List의 0번을 Add해 맨끝에 위치, 0번을 지워 왼쪽으로 한 칸 회전시킨다.
public int 괄호회전하기(string s)
{
    int answer = 0;
    List<char> chars = new List<char>(s);

    for(int i = 0; i < s.Length; i++)
    {
        answer += IsCorrect(chars) ? 1 : 0;
        chars.Add(chars[0]);
        chars.RemoveAt(0);
    }

    return answer;
}

 

  • Stack<char> stack을 만든다.
  • 여는 괄호와 닫는 괄호를 담은 string open, close를 만든다
  • List<char> 길이만큼 반복한다.
  • chars[i] 가 여는 괄호이면 스택에 푸시
  • chars[i] 가 닫는 괄호이면 추가 검사
    • stack이 비어있으면 false
    • stack을 Peek했을 때 나온 괄호(open)과 close의 괄호가 짝이 맞는지 검사해 짝이 안 맞으면 false
    • 짝이 맞으면 stack을 Pop 한다.
  • 반복문이 종료되고 stack에 남은 괄호가 있으면 false
  • stack이 비어있으면 모든 짝이 맞았기 때문에 true
private bool IsCorrect(List<char> chars)
{
    Stack<char> stack = new Stack<char>();
    string open = "({[";
    string close = ")}]";

    for(int i = 0; i < chars.Count; i++)
    {
        if (open.Contains(chars[i]))
            stack.Push(chars[i]);
        else
        {
            if (stack.Count == 0)
                return false;
            if (chars[i] != close[open.IndexOf(stack.Peek())])
                return false;
            stack.Pop();
        }
    }
    if(stack.Count != 0)
        return false;
    return true;
}

 

'프로그래머스' 카테고리의 다른 글

카운트다운 (C#)  (0) 2024.05.20
n개 간격의 원소들 (C#)  (0) 2024.05.20
귤 고르기 (C#)  (0) 2024.05.09
멀리 뛰기 (C#)  (0) 2024.05.09
예상 대진표 (C#)  (0) 2024.05.09