백준 2164 카드2 (파이썬)
2022. 12. 1. 21:15
백준
풀이 및 해설(주석) from collections import deque # 사실 큐 문제는 deque사용하면 편하다; N = int(input()) Q = deque([i for i in range(1, N+1)]) # 큐에 하나만 남을 때 까지 두가지 작업 반복 while len(Q) > 1: Q.popleft() Q.append(Q.popleft()) print(*Q)
백준 14503 로봇 청소기 (파이썬)
2022. 11. 29. 23:17
백준
풀이 import sys # 북동남서 D = [[-1, 0], [0, 1], [1, 0], [0, -1]] N, M = map(int, sys.stdin.readline().strip().split()) r, c, d = map(int, sys.stdin.readline().strip().split()) arr = [list(map(int, sys.stdin.readline().strip().split())) for _ in range(N)] for_fir_dir = [1, 0, 3, 2] visited = [[0] * M for _ in range(N)] visited[r][c] = 1 cnt = 0 turn_cnt = 0 while True: d = (d-1)%4 nr, nc = r + D[d][0]..
백준 1260 DFS와 BFS (파이썬)
2022. 11. 29. 21:26
백준
풀이 import sys; from collections import defaultdict, deque def dfs(u): global dfs_lst if u in visit_dfs: return dfs_lst.append(u) visit_dfs.add(u) for v in G[u]: dfs(v) def bfs(u): global bfs_lst Q = deque() Q.append(u) visit_bfs.add(u) bfs_lst.append(u) while Q: u = Q.popleft() for v in G[u]: if v not in visit_bfs: visit_bfs.add(v) bfs_lst.append(v) Q.append(v) N, M, V = map(int, sys.stdin.readl..
백준 2493 탑 (파이썬)
2022. 11. 14. 17:08
백준
풀이 및 해설(주석) import sys N = int(sys.stdin.readline()) arr = list(map(int, sys.stdin.readline().strip().split())) S = [] # 결과 값을 담을 리스트 rst = [] # 아무 조건에 충족하지 않으면 rst에 0을 추가 (왼쪽에 나보다 큰놈이 없는 경우) # 그리고 그 인덱스와 높이를 S에 추가 for i in range(N): pointer = 0 hei = arr[i] # S에 추가된 놈들 중 나보다 작은놈은 pop해버리기 while S and S[-1][0] < arr[i]: S.pop() # 위의 과정을 거쳤는데 S에 뭐가 남아있으면 그게 내 왼쪽에서 나보다 큰놈의 정보임 if S: pointer = S[-1]..
백준 6549 히스토그램에서 가장 큰 직사각형 (파이썬)
2022. 11. 13. 13:52
백준
풀이 import sys; while True: N, *info = map(int, sys.stdin.readline().strip().split()) if N == 0: break info.append(0) S = [] rst = 0 for i in range(N+1): # 스택에 높이와 인덱스를 저장할건데 pointer는 인덱스를 가리킴 # 이때 저장하는 인덱스는 단순히 그 높이의 인덱스가 아니라 현재 높이로 만들수 있는 전의 인덱스를 가르킴 pointer = i # 현재 높이가 스택에 마지막 요소의 높이보다 작으면 rst값을 갱신 while S and info[i] < S[-1][0]: h, d = S.pop() # 이때 포인터를 d로 가르키게함 자세한 설명은 후기에.. pointer = d tmp..
백준 13305 주유소 (파이썬, 자바)
2022. 11. 10. 21:53
백준
풀이 및 해설(주석) [파이썬] import sys N = int(sys.stdin.readline()) dist = list(map(int, sys.stdin.readline().strip().split())) citys = list(map(int, sys.stdin.readline().strip().split())) # 첫 번째 도시에서는 무조건 다음 도시로 이동할 거리만큼 기름을 채워야 한다. rst = dist[0] * citys[0] # 현재 기름 가격은 0번째 city now_price = citys[0] # 현재 위치 == 거리 now = 0 for i in range(1, N-1): now = dist[i] # 다음 도시의 가격이 현재 가격보다 낮으면 그 가격으로 기름을 채움 if city..
백준 15686 치킨 배달 (파이썬)
2022. 11. 8. 22:11
백준
풀이 및 해설(주석) import sys def solve(m, index): global rst if m == M: cnt = 0 for home in homes: r, c = home[0], home[1] tmp = 2*N+1 for chick in ans: er, ec = chick[0], chick[1] if (abs(er-r) + abs(ec-c)) rst: return rst = min(rst, cnt) return for i in range(index, chicks_len): ans.append(chicks[i]) solve(m+1, i+1) ans.pop() N, M = map(int, sys..
백준 1406 에디터 (파이썬)
2022. 11. 6. 18:33
백준
풀이 import sys; import collections S = list(sys.stdin.readline().strip()) Q = collections.deque() N = int(sys.stdin.readline().strip()) for _ in range(N): info = list(sys.stdin.readline().strip().split()) if info[0] == 'L' and S: Q.append(S.pop()) elif info[0] == 'D' and Q: S.append(Q.pop()) elif info[0] == 'B' and S: S.pop() elif info[0] == "P": S.append(info[1]) Q.reverse() S.extend(Q) print(''..