BOJ2504 괄호의 값 (R)

2023. 4. 7. 22:41· Problem Solving/구현

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

 

2504번: 괄호의 값

4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 X

www.acmicpc.net

 

난이도: 실버1

소요시간: 실패, 90분

 

시간이 너무 소모되어 중간에 그만두고 정답코드를 보았다.

 

아래는 나의 썻다 지웟다 하다가 지금은  쓰다가 만 코드이다.

#08:48 실버1 90분 실패
import sys
from collections import deque
string = sys.stdin.readline().rstrip()




print(string)
def solve(string):
    first=[]
    for i in range(len(string)-1):
        if string[i]=='(' and string[i+1]==')':
            first.append(2)
        elif string[i] =='[' and string[i+1]==']':
            first.append(3)
        else:
            first.append(string[i])
        if first[-1]==2 or first[-1]==3:
            continue
        else:
             first.append(string[i+1])
    second=[]
    print(*first)
    k=0
    while k<5:
        string
        #괄호의 짝이 없으면 리턴0
        #숫자가 있다면 그 양쪽 괄호 확인해서 계산
        #숫자끼리 붙어 있다면 더하기
        for i in range(len(first)):
            if type(first[i])==type(1):
                if i-1>0 and i+1<len(first)-1:
                    if first[i-1]=='(' and first[i+1]==')':
                        second.pop()
                        second.append(int(2*first[i]))
                    elif first[i - 1] == '[' and first[i + 1] == ']':
                        second.pop()
                        second.append(int(3 * first[i]))
                    else:
                        second.append(first[i])
                else:
                    second.append(first[i])

            else:
                if i!=0 and type(first[i-1])==type(1):
                    pass
                else:
                    second.append(first[i])
        k+=1

        first=second[:]
        print(*second)
        second=[]




    return first

# 괄호의 짝이 있는지 체크 함수

print(solve(string))

 

 

 

나의 접근법은 문자를 순차적으로 읽으면서 괄호(),[] 붙어 있는 것을 일차로 숫자로 바꾸고

두번쨰탐색부터는 while문에 넣어 숫자를 기준으로 괄호를 풀어가는 방식을 생각하였는데 구현에 상당한 시간이 소요되었다. 도중에 이게 아닌거 같아 포기하고 답을 보았다..

 

아래는 정답예제코드인데 여는 괄호에  연산을 해주고 이후에 닫는 괄호가 나오면 다시 역연산을 해주는 방식이였다.. 그리고 스택에 괄호를 넣어가면서 짝을 만나면 빼주는 식으로 가능한지도 체크해줄수 있다. 여는 괄호가 스택에 없는데 닫는괄호가 나오면 에러! 또 스택에 마지막에 들어간 괄호와 짝이 맞는지! 안맞다면 잘못된 괄호입력! 에러!

구현을 풀때마다 느끼는데 운이 조금 따라야할 것같다.. 물론 많이 풀면 어느정도는 커버되겠지만.. 

 

stack = [] # 스택
res = 1 # result에 더해주기 전 임시 변수
result = 0 # 결과 변수
p = list(input()) # 입력값

# 1~4번째 과정 시작
for i in range(len(p)):
  if p[i]=='(':
    res *= 2
    stack.append(p[i])
    
  elif p[i]=='[':
    res *= 3
    stack.append(p[i])
    
  elif p[i]==')':
    if not stack or stack[-1]!='(':
      result = 0
      break
    if p[i-1]=='(': result += res
    res //= 2
    stack.pop()
    
  elif p[i]==']':
    if not stack or stack[-1]!='[':
      result = 0
      break
    if p[i-1]=='[': result += res
    res //= 3
    stack.pop()


# 결과 출력
if stack:
  print(0)
else:
  print(result)

정답예제 참고: https://velog.io/@thguss/백준-2504.-괄호의-값-with.-Python

'Problem Solving > 구현' 카테고리의 다른 글

프로그래머스 Array  (0) 2023.04.28
kakao2018 셔틀버스(R)  (0) 2023.04.12
BOJ1138 한 줄로 서기  (0) 2023.03.28
BOJ1032 명령 프롬프트  (0) 2023.03.20
게임 개발  (0) 2022.12.29
'Problem Solving/구현' 카테고리의 다른 글
  • 프로그래머스 Array
  • kakao2018 셔틀버스(R)
  • BOJ1138 한 줄로 서기
  • BOJ1032 명령 프롬프트
윤재에요
윤재에요
윤재에요
yunzae.log
윤재에요
전체
오늘
어제
  • 분류 전체보기 (435)
    • Computer Science (115)
      • 데이터베이스 (50)
      • 네트워크 (18)
      • 소프트웨어 공학 (1)
      • 알고리즘 (10)
      • 자료구조 (9)
      • 컴퓨터구조 (0)
      • 운영체제 (0)
      • 데이터 통신 (16)
      • 프로그래밍언어론 (11)
    • Project (20)
      • 후크(Flutter) (1)
      • BDSR로그북(App,BackEnd) (2)
      • 나만의 주점(STM32,Arduino,androi.. (9)
      • 공다(App,BackEnd) (2)
      • 카카오쇼핑 클론코딩 (4)
      • 암호화폐자동매매 (2)
    • Problem Solving (205)
      • 자바 문법 (20)
      • 파이썬 문법,함수 (6)
      • 그리디 (5)
      • 구현 (43)
      • DFS (3)
      • BFS (17)
      • 정렬 (15)
      • 이진 탐색 (16)
      • 다이나믹 프로그래밍 (6)
      • 최단 경로 (5)
      • 그래프 (1)
      • 자료구조 (5)
      • 투포인터 (15)
      • SQL (41)
      • 구간합 (7)
    • I leaned (78)
      • 스프링,스프링부트 (31)
      • Git (6)
      • JAVA (5)
      • Etc (30)
    • 취업 (15)
      • PT면접 (6)
      • 기술면접 (9)
      • 인성면접 (0)
    • log (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 이것이 코딩테스트다.
  • 그리디
  • 효율적인화폐구성
  • 힙큐
  • 카카오테크캠퍼스
  • 다이어그램
  • 참조 무결성
  • 플로이드 워셜
  • 최단 거리
  • 데이터베이스
  • 이것이 코딩테스트다
  • E-R Model
  • 다이나믹프로그래밍
  • 제약 사항
  • 교환정렬
  • weak entity
  • 부품찾기
  • 다이나믹
  • 이것이코딩테스트다
  • 다익스트라
  • 기수정렬
  • DP
  • 파이썬
  • Relationship model
  • 재시도
  • 계수정렬
  • 최단거리
  • 먀
  • 개미전사
  • UML

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
윤재에요
BOJ2504 괄호의 값 (R)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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