본문 바로가기

전체 글137

파이썬 - 전위 표현식 전위 표현식 확인용 사이트 : https://www.free-online-calculator-use.com/infix-to-prefix-converter.html Infix to Prefix Converter | Interactive Step-By-Step Stack Tutorial Converts an infix expression to a prefix expression using stack, and displays the conversion process for each scanned character. www.free-online-calculator-use.com 전위표현식은 후위 표현식과 유사하지만 입력받는 연산식을 뒤집어서 검사해주는 방식을 사용해준다. 처음에 입력받은 연산식을 뒤집고, 연산자.. 2022. 11. 13.
좌표 정렬하기 2 - 11651번 람다식을 통해 정렬 조건을 주었다. sort()에 key = lambda x:(x[1],x[0]) 를 주었다. 인덱스 1번, 인덱스 0번을 순서대로 정렬 우선순위를 부여하였다. t = int(input()) a = [] for _ in range(t): a.append(list(map(int,input().split()))) a.sort(key = lambda x:(x[1],x[0])) for i in a: print(i[0],i[1]) 2022. 11. 8.
제로 - 10773번 들어온 수를 스택에 담고 0이 들어오면 pop 해준다. from collections import deque import sys stack = deque() t = int(input()) for _ in range(t): inn = int(sys.stdin.readline()) if inn==0: if stack: stack.pop() else: stack.append(inn) print(sum(stack)) 2022. 11. 8.
마인크래프트-18111번 python3에서 시간초과가 뜨면 pypy로 제출하면 정답이다. import sys y_axis, x_axis, inven = map(int,input().split()) graph = [] for i in range(y_axis): inn = list(map(int,sys.stdin.readline().split())) graph.append(inn) avg = 0 for i in graph: avg += sum(i) avg = avg//(x_axis*y_axis) avg_cost = [inven,0,avg] for y in range(y_axis): for x in range(x_axis): gap = graph[y][x] - avg if gap>0: avg_cost[1] += gap*2 avg_co.. 2022. 11. 8.
키로거 - 5397번 덱을 2개를 만든다. 하나는 비밀번호를 담아둘 덱이고, 나머지 하나는 화살표로 이동했을 경우 기존 비밀번호에서 pop하여 잠시 담아둘 덱이다. 패스워드는 스택형식으로 받고 화살표로 이동해서 비밀번호의 중간을 수정할 때를 위하여 잠시 담아두는 덱도 스택처럼 이용하였다. 도움되었던 반례 : 1 >>>ABC->>e 2022. 11. 7.
절댓값 힙 - 11286번 최대힙을 사용할 때 처럼, 위치를 결정해주는 키 값에 조작을 가하는데, abs( )를 사용하여 절댓값으로 사용한다. import sys import heapq t = int(input()) h = [] result = [] for _ in range(t): inn = int(sys.stdin.readline()) if not inn and h: r = heapq.heappop(h) result.append(r[1]) print(r[1]) elif not inn and not h: result.append(0) print(0) else: heapq.heappush(h,(abs(inn),inn)) # print(result) 2022. 10. 31.
후위 표기식 - 1918번 입력받은 식을 하나씩 꺼내면서 각 기호마다 해야할 역할을 조건문 내부에 적어주었다. 곱셈 나눗셈이 나왔을 때, 덧셈 뺄셈이 나왔을 때, '(' 가 나왔을 때, ')' 가 나왔을 때 각 4 가지 경우에 대해 만들어줘야한다. 그리고 식 탐색이 끝났을 때 스택에 남아있는 기호들을 pop으로 빼준다. 도움된 반례 input : A*B-C*D/E output : AB*CD*E/- from collections import deque inn = input() stack = deque() result = '' math = ['(',')','*', '/','+','-'] for i in range(len(inn)): t = inn[i] if t==math[0]: stack.append('(') elif t==math[.. 2022. 10. 31.
최대 힙 - 11279번 파이썬의 heapq는 최소힙만 사용가능하다. 최소힙만 가능한 상황에서 최대힙을 사용하고 싶으면 heappush에서 (-1 * 값, 값) 을 넣어주면된다. heappop 시에는 반환값의 인덱스 1 값을 사용하면 원래의 값을 이용할 수 있다. import sys import heapq t = int(input()) h = [] for _ in range(t): inn = int(sys.stdin.readline()) if not inn and h: r = heapq.heappop(h) print(r[1]) elif not inn and not h: print(0) else: heapq.heappush(h,(-1*inn,inn)) 2022. 10. 31.
최소 힙 - 1927번 파이썬의 모듈 heapq는 중복을 허용하지 않고, 작은 값을 root에 두도록 정렬하는 최소힙구조이며, pop을 할 경우 root의 값이 없어지면서 반환된다. import sys import heapq t = int(input()) h = [] for _ in range(t): inn = int(sys.stdin.readline()) if not inn and h: r = heapq.heappop(h) print(r) elif not inn and not h: print(0) else: heapq.heappush(h,inn) 2022. 10. 31.
덩치 - 7568번 본인보다 덩치가 큰사람이 k 명있으면 본인의 등수는 k+1이 된다는 것에 유의하며 2중for 문을 돌려주었다. import sys t = int(input()) w = [] h = [] for _ in range(t): a,b = map(int,sys.stdin.readline().split()) w.append(a) h.append(b) i = 0 j = -1 result = [t for _ in range(t)] for i in range(t): r = 1 for j in range(t): if i==j: continue if w[i] < w[j] and h[i] < h[j]: r+=1 print(r,end=' ') 2022. 10. 31.
최대공약수와 최소공배수 - 2609번 유클리드 호제법으로 최대공약수를 구한다. 최소공배수 = "두수의 곱 / 최대공약수" 이다 a,b = map(int,input().split()) if a < b: a,b = b,a def gcd(a,b): while a%b != 0: a, b = b, a%b return b def lcm(a,b, gcd_result): return int(a*b/gcd_result) gcd_result = gcd(a,b) lcm_result = lcm(a,b,gcd_result) print(gcd_result) print(lcm_result) 2022. 10. 30.
부녀회장이 될테야 - 2775번 다이나믹 프로그램으로 해결하였다. 0층에 대한 사람수를 저장해 놓은 배열을 준비한 후, 1층씩 올라가면서 각 호실에 몇명이 있어야 하는지 계산하여 넣어준다. k층까지 반복해준뒤, n호실에 몇명이 있는지 출력해준다. import sys t = int(input()) for _ in range(t): a = [i for i in range(15)] k = int(sys.stdin.readline()) n = int(sys.stdin.readline()) for i in range(k): for j in range(1,15): if j == 1: a[j] = 1 else: a[j] = a[j-1] + a[j] print(a[n]) 2022. 10. 26.