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 |
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 |