From bd3333df0da2ac61a2771d54f92dc3f0fb62a155 Mon Sep 17 00:00:00 2001 From: parksboo Date: Sat, 8 Mar 2025 15:50:42 +0900 Subject: [PATCH 1/2] ADD 1918.py --- solutions/baekjoon/1918/main.py | 48 +++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 solutions/baekjoon/1918/main.py diff --git a/solutions/baekjoon/1918/main.py b/solutions/baekjoon/1918/main.py new file mode 100644 index 0000000..1f0ef43 --- /dev/null +++ b/solutions/baekjoon/1918/main.py @@ -0,0 +1,48 @@ +# Authored by : parksb08 +# Co-authored by : - +# Link : http://boj.kr/467d3ad526dc460db851f8774d4f86b7 +import sys +def input(): + return sys.stdin.readline().rstrip() + +inputs = input() +rs=[] +stack=[] +i_p={'+':1,'-':1,'*':2,'/':2, '(':4, ')':0} #stack에 들어갈 때 +s_p={'+':1,'-':1,'*':2,'/':2, '(':0} #stcak에서 나올 때 +for i in inputs: + if i.isalpha(): + rs.append(i) + elif i == '(': + stack.append(i) + elif i ==')': + if stack: + while s_p[stack[-1]] >= i_p[i]: + if stack[-1]=='(': + stack.pop() + break + else: + rs.append(stack.pop()) + if not stack: + break + else: + if stack: + while s_p[stack[-1]] >= i_p[i]: + rs.append(stack.pop()) + if not stack: + break + stack.append(i) +while stack: + rs.append(stack.pop()) + +print(''.join(rs)) +''' +후위표기식을 만드는 문제 +스택을 이용해서 풀었다. +1. 알파벳이면 결과에 바로 추가 +2. 여는 괄호면 스택에 추가 +3. 닫는 괄호면 여는 괄호가 나올 때 까지 스택에서 pop +4. 연산자면 스택에서 우선순위가 높은 연산자가 나올 때 까지 pop +5. 스택이 빌 때 까지 pop +6. 결과 출력 +''' From 1243fc7151110b6e99707d8aeba869ee2893c858 Mon Sep 17 00:00:00 2001 From: Minsang Kim Date: Sat, 8 Mar 2025 16:06:23 +0900 Subject: [PATCH 2/2] fix typo and refactoring --- solutions/baekjoon/1918/main.py | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/solutions/baekjoon/1918/main.py b/solutions/baekjoon/1918/main.py index 1f0ef43..f36b3cf 100644 --- a/solutions/baekjoon/1918/main.py +++ b/solutions/baekjoon/1918/main.py @@ -9,34 +9,29 @@ def input(): rs=[] stack=[] i_p={'+':1,'-':1,'*':2,'/':2, '(':4, ')':0} #stack에 들어갈 때 -s_p={'+':1,'-':1,'*':2,'/':2, '(':0} #stcak에서 나올 때 +s_p={'+':1,'-':1,'*':2,'/':2, '(':0} #stack에서 나올 때 for i in inputs: if i.isalpha(): rs.append(i) elif i == '(': stack.append(i) elif i ==')': - if stack: - while s_p[stack[-1]] >= i_p[i]: - if stack[-1]=='(': - stack.pop() - break - else: - rs.append(stack.pop()) - if not stack: - break - else: - if stack: - while s_p[stack[-1]] >= i_p[i]: + while stack and s_p[stack[-1]] >= i_p[i]: + if stack[-1]=='(': + stack.pop() + break + else: rs.append(stack.pop()) - if not stack: - break + else: + while stack and s_p[stack[-1]] >= i_p[i]: + rs.append(stack.pop()) stack.append(i) while stack: rs.append(stack.pop()) print(''.join(rs)) -''' + +''' Solution Description 후위표기식을 만드는 문제 스택을 이용해서 풀었다. 1. 알파벳이면 결과에 바로 추가