[백준] 4949 균형잡힌 세상(C#)

2024. 1. 24. 02:01· 동식이 취업시키기 작전/코딩테스트
목차
  1. 문제
  2. 코드
  3. 고민
728x90

문제

https://www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에

www.acmicpc.net

이전에 진행했던 대칭괄호 문제와 유사하다. Stack의 Peek을 사용해도 되고 Queue를 사용해도 될 거 같다.

코드

using System;
using System.Text;
using System.Collections.Generic;

namespace baekjoon
{
    class Algorithm
    {
        static void Main(string[] str)
        {
            while(true)
            {
                string s = Console.ReadLine();
                
                if(s.Length == 1 && s[0] == '.') { break; }
                
                bool isOkay = true;
                Stack<char> stack = new Stack<char>();
                
                foreach(var c in s)
                {
                    if(c == '(' || c == '[') { stack.Push(c); }
                    
                    if(c == ')')
                    {
                        if(stack.Count == 0 || stack.Peek() != '(')
                        {
                            isOkay = false;
                            break;
                        }
                        else
                        {
                            stack.Pop();
                        }
                    }
                    if(c == ']')
                    {
                        if(stack.Count == 0 || stack.Peek() != '[')
                        {
                            isOkay = false;
                            break;
                        }
                        else
                        {
                            stack.Pop();
                        }
                    }
                }

                if(stack.Count == 0 && isOkay == true)
                {
                    Console.WriteLine("yes");
                }
                else
                {
                    Console.WriteLine("no");
                }
            }
            
        }
    }
}

고민

내가 이거때문에 이해가 안되서 잠을 못잤다. 

 

결국 다른 사람 코드를 대조하면서까지 집요하게 찾아냈는데.. 이유가

using System;
using System.Text;
using System.Collections.Generic;

namespace baekjoon
{
    class Algorithm
    {
        static void Main(string[] str)
        {
            Stack<char> stack = new Stack<char>();
            StringBuilder sb = new StringBuilder();
            
            while(true)
            {
                string s = Console.ReadLine();
                
                // 종료 조건
                if(s.Length == 1 && s[0] == '.') { break; }
                
                // 반복 조건
                for(int i = 0; i < s.Length; i++)
                {
                    if(s[i] == '(' || s[i] == '[')
                    {
                        stack.Push(s[i]);
                    }
                    if(s[i] == ')')
                    {
                        if(stack.Peek() != '(' || stack.Count == 0)
                        {
                            sb.AppendLine("no");
                            stack.Clear();
                            continue;
                        }
                        else
                        {
                            stack.Pop();
                        }
                    }
                    if(s[i] == ']')
                    {
                        if(stack.Pop() != ']' || stack.Count == 0)
                        {
                            sb.AppendLine("no");
                            continue;
                        }
                        else
                        {
                            stack.Pop();
                        }
                    }
                    
                    if(stack.Count == 0)
                    {
                        sb.AppendLine("yes");
                        break;
                    }
                }
            }
            Console.WriteLine(sb);
        }
    }
}

다른 분들은 보이시나요...

 

if문에서 stack.Count == 0을 먼저 해주지 않아서 그렇다.... Stack은 후입선출을 하는 자료구조이기 때문에 stack안에 데이터가 없으면 에러가 발생하는데, 이를 if문에서 미리 stack.Count == 0로 예외처리를 해주고 다음 || 이하의 연산(?)에 들어가야해서 그렇다.

 

내가 진짜.. 이거때문에 얼마나 힘들고 다른 사람 코드를 봐야한다는 사실에 기분도 안좋고 슬펐는데 결국 내 무지와 섬세하지 못한 부분에서 또 일이 났다.

 

앞으로는 이런 부분에서 문제가 발생하지 않도록 주의 해야겠다고 생각했다.

저작자표시 비영리 변경금지

'동식이 취업시키기 작전 > 코딩테스트' 카테고리의 다른 글

[백준] 4673 셀프넘버(C#)  (0) 2024.01.25
[백준] 2839 설탕배달(C#)  (1) 2024.01.24
[백준] 1764 듣보잡(C#)  (0) 2024.01.24
[백준] 11866 요세푸스(C#)  (1) 2024.01.23
[백준] 5430 AC(C#)  (0) 2024.01.23
  1. 문제
  2. 코드
  3. 고민
'동식이 취업시키기 작전/코딩테스트' 카테고리의 다른 글
  • [백준] 4673 셀프넘버(C#)
  • [백준] 2839 설탕배달(C#)
  • [백준] 1764 듣보잡(C#)
  • [백준] 11866 요세푸스(C#)
이동식이
이동식이
개발자가 되고싶은 동식이... 티스토리를 시작하게 되었다.
이동식이
동식이의 공부상자
이동식이
전체
오늘
어제
  • 분류 전체보기 (115)
    • 동식이 취업시키기 작전 (74)
      • 코딩테스트 (43)
      • 알고리즘 (5)
      • Unity (7)
      • CS (1)
      • 1차 프로젝트 : Overcooked2 (4)
      • FPS - Penguin party(feat. u.. (4)
      • UNITY로 FPS GAME 개발(FEAT. 1인.. (3)
      • 기업프로젝트 : Hacsamo (3)
    • 알고리즘 (15)
      • 백준 (4)
      • 프로그래머스 (10)
    • 일기 (3)
      • 회고 (0)
      • 리뷰 (0)
    • 자격증 (7)
      • 실기 (3)
      • 1. 요구사항 확인 (4)
    • Project (10)
      • Team Project (4)
      • Personal Project (0)
      • 베어머더러 (0)
      • 빵빵빵 타이쿤 (6)
    • 기술 블로그 염탐 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 관리자

공지사항

인기 글

태그

  • Python
  • 파이썬
  • Photon
  • c#
  • 아자아자 파이팅이닷!
  • 코딩테스트
  • move to ui
  • Unity
  • 애인에겐 머리를 조아려 감사함
  • 자료구조
  • 프로그래머스
  • 개인정보수집유효기간
  • 유니티
  • 스택
  • 무한배경
  • UI이동시키기
  • 슬픈 런타임에러 증후군
  • 빵빵빵타이쿤
  • 백준
  • 배경스크롤링

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
이동식이
[백준] 4949 균형잡힌 세상(C#)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.