목록스택 (5)
홍우진의 개발 일기장
문제 링크https://www.acmicpc.net/problem/1541풀이 코드sik = input().split('-') # 마이너스를 기준으로 나누기num = []for i in sik: sum = 0 su = i.split('+') # 덧셈 계산을 위해 숫자만 뽑고 더하기 for j in su: sum += int(j) num.append(sum) # 덧셈 완료된 수들 저장n = num[0]for i in range(1,len(num)): n -= num[i] # 첫 번째 값에서 나머지 값을 모두 빼준다.print(n)코드 해석 먼저 더할 수 있는 수들을 다 더한 후,맨 앞 숫자에서 다 빼면 가장 낮을 수를 구할 수 있다. - 를 기준으로 나눈 뒤 ..
문제 링크https://www.acmicpc.net/problem/3986 풀이 코드n = int(input())ans = 0for _ in range(n): stack = [] dan = input() for i in dan: if stack and stack[-1] == i: stack.pop() else: stack.append(i) if not stack: ans += 1 print(ans)코드 해석 stack을 만들어서 후입선출 방식을 사용한 후,stack에 값이 남아있는지 확인한다.남아있다면? 나쁜 단어. 체감 난이도: ★★☆☆☆
문제 링크https://www.acmicpc.net/problem/1406풀이 코드from sys import stdinleft = list(input())right = []for _ in range(int(input())): inp = list(stdin.readline().split()) if inp[0] == 'L' and left: right.append(left.pop()) elif inp[0] == 'D' and right: left.append(right.pop()) elif inp[0] == 'B' and left: left.pop() elif inp[0] == 'P': left.append(inp[1])dap =..
문제 링크https://www.acmicpc.net/problem/28278 풀이 코드import sysst = []for _ in range(int(sys.stdin.readline())): a = sys.stdin.readline().split() if a[0] == '1': st.append(a[1]) elif a[0] == '2': if st: print(st.pop()) else: print(-1) elif a[0] == '3': print(len(st)) elif a[0] == '4': if st: print(0) else: ..
문제 링크https://www.acmicpc.net/problem/1874 풀이 코드cnt = 1result = Truestack = []dap = []n = int(input())for i in range(n): num = int(input()) while cnt 코드 해석복잡한 난이도였다.핵심은 cnt다. cnt가 stack을 쌓아주고 만들때마다 +를 답에 집어넣고, cnt + 1 을 해준다.stack을 쌓다가 만약 stack에 들어간 수가 사용자가 넣은 수(num)랑 똑같다면 stack의 제일 끝 수를 빼고 답에 -를 집어넣는다.만약 동일하지 않다면 수열 생성이 불가능하다는 뜻이다. 따라서 NO를 출력하고 끝낸다.