본문 바로가기

분류 전체보기

(263)
[백준] 11399 : ATM python 1. n을 입력받는다 2. 인출하는 데에 걸리는 시간을 list에 저장한다. 3. list를 정렬한다. 4. 한 사람이 ATM을 사용할 때마다 앞 사람들이 인출하는 데에 걸린 시간을 더해 tmp를 계산하고, 총합인 sum에 더해준다. 5. sum을 출력한다. n = int(input()) time = list(map(int,input().split())) time.sort() tmp = 0 sum = 0 for i in range(n): for j in range(i+1): tmp += time[j] sum += tmp print(tmp) 이중반복문을 쓰는 것이 그다지 효율적인 방법은 아닌 것 같아 다른 사람들의 풀이도 찾아보았다. 아래는 enumerate()를 사용한 코드이다. N = int(input..
[백준] 1931 : 회의실 배정 python 1. N을 입력받는다. 2. 시작시간과 종료시간을 저장할 list인 data를 생성한다. 3. data에 (시작시간, 종료시간)의 형태로 회의시간을 저장한다. 4. data를 회의의 종료시간을 기준으로 오름차순 정렬한다. 5. 회의의 개수를 저장할 cnt를 0으로 초기화한다. 6. 회의의 종료시간을 저장하는 변수 end에 data[0][1]을 저장한다.(가장 빨리 끝나는 회의의 종료시간) 7. 가능한 회의의 개수를 센다. 7-1. 현재 회의의 종료시간
[백준] 11047 : 동전 0 python 이러한 조건이 붙어있기 때문에 이 문제는 그리디 알고리즘으로 해결할 수 있다. 큰 동전이 작은 동전들의 배수이기 때문에 큰 동전부터 사용해서 금액을 채워나가다보면 동전의 개수가 최소가 되기 때문이다. 1. N과 K를 입력받는다. 2. N줄에 걸쳐 입력되는 동전의 가치를 coins list에 저장한다. 3. coins 배열을 내림차순으로 정렬한다. 4. 동전의 개수를 저장할 변수 cnt를 0으로 초기화한다. 5. coins에 저장된 동전 중 값이 큰 것부터 금액 K를 맞춰간다. 5-1. K가 각 동전(coin)보다 크다면 K를 coin으로 나눈 몫만큼 cnt를 증가시킨다. 5-2. K를 coin으로 나눈 나머지로 K를 업데이트한다. n,k=map(int,input().split()) coins = [] c..
[구현] 상하좌우, 시각, 왕실의 나이트, 문자열 재정렬 python 상하좌우 n = int(input()) x,y = 1,1 dx = [-1,1,0,0] dy = [0,0,-1,1] move_types = ['U','D','L','R'] plans = input().split() for plan in plans: for i in range(len(move_types)): if plan == move_types[i]: nx = x+dx[i] ny = y+dy[i] if nxn or nyn: continue x,y = nx,ny print(x,y) 시각 문제 설명을 듣고 직접 짠 코드 n = int(input()) cnt=0 for h in range(n+1): for m in range(60): for s in range(60): if(h%10==3)or(m%10==3 o..
[그리디 알고리즘] 1이 될 때까지 python k로 나눌 수 있는 만큼 나누고 나머지는 -1을 반복해서 수행하는 방식으로 해결하면 된다. n,k = map(int,input().split()) result = 0 while True: # n보다 작거나 같은 수 중 k로 나누어떨어지는 가장 큰 수 target = (n//k)*k # -1을 수행해야 하는 횟수를 계산한 것 result += (n-target) n = target # n이 k로 나눠떨어지지 않는다면 # -1을 수행해야 하니 반복문 탈출 if n
[백준] 1991 : 트리 순회 python 이코테의 트리 순회 강좌를 보고 짠 코드 import sys input = sys.stdin.readline class Node: def __init__(self, data, left, right): self.data=data self.left=left self.right=right def pre_order(node): print(node.data, end='') if node.left!=None: pre_order(tree[node.left]) if node.right!=None: pre_order(tree[node.right]) def in_order(node): if node.left!=None: in_order(tree[node.left]) print(node.data,end='') if node..
[백준] 11279 : 최대 힙 python import sys import heapq input = sys.stdin.readline h = [] n = int(input()) for i in range(n): x = int(input()) if x==0: if not h: print(0) else: print(heapq.heappop(h)[1]) else: heapq.heappush(h,(-x,x)) heapq.heappush(heap, (-item,item)) 튜플형식으로 음수값과 함께 원래 값을 힙에 추가하면 튜플의 첫 번째 원소인 -item으로 최소 힙 정렬을 수행하기 때문에 최대 힙 정렬을 수행한 것과 같은 효과가 일어난다. heapq.heappop(heap)[1] pop할 때에는 튜플의 두 번째 값을 꺼내오면 된다.
[백준] 1927 : 최소 힙 python import sys import heapq input = sys.stdin.readline n = int(input()) h = [] for i in range(n): x = int(input()) if x==0: # 리스트가 비어있으면 if not 조건이 True가 됨 if not h: print(0) else: print(heapq.heappop(h)) else: heapq.heappush(h,x)