백준 17144 미세먼지 안녕! (파이썬)
2022. 12. 8. 15:39
백준
풀이 및 해설(주석) import sys; from collections import deque # 먼지 확산 함수 def spread(): # 먼지 담기 munji = deque() for i in range(N): for j in range(M): if room[i][j] >= 1: munji.append((i, j, room[i][j])) # 먼지 확산 while munji: r, c, amount = munji.popleft() d_count = 0 for di, dj in [[1, 0], [0, 1], [-1, 0], [0, -1]]: nr, nc = r + di, c + dj if 0
백준 10773 제로 (파이썬, 자바)
2022. 12. 6. 23:10
백준
풀이 (파이썬) import sys N = int(sys.stdin.readline()) S = [] for _ in range(N): num = int(sys.stdin.readline()) if num > 0: S.append(num) elif num == 0: S.pop() print(sum(S)) 풀이 (자바) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) throws IOExcepti..
백준 2232 지뢰 (파이썬)
2022. 12. 5. 22:53
백준
풀이 import sys N = int(sys.stdin.readline().strip()) # 좌, 우 살피면서 확인할 것이니까 좌, 우에 0추가 nums = [0] for _ in range(N): nums.append(int(sys.stdin.readline().strip())) nums.append(0) rst = [] # 숫자들의 좌, 우가 나보다 작거나 같으면 터뜨려야되는 지뢰임 for i in range(1, N+1): if nums[i-1] = nums[i+1]: rst.append(i) print('\n'.join(map(str, rst))) 삽질 코드 import sys N = int(sys.stdin.readline().strip()) nums = [] for _ in range(N)..
백준 2042 구간 합 구하기 (파이썬) (세그먼트)
2022. 12. 5. 21:26
백준
풀이 import sys; from math import ceil, log def main(node, start, end): if start == end: tree[node] = nums[start] return tree[node] else: tree[node] = main(node*2, start, (start+end)//2) + main(node*2+1, (start+end)//2+1, end) return tree[node] def sub_sum(node, start, end, left, right): if start > right or end < left: return 0 if left = end: return tree[node] return sub_sum(node*2, start, (start+..
백준 11659 구간 합 구하기 4 (파이썬) (세그먼트)
2022. 12. 4. 22:48
백준
풀이 import sys; from math import ceil, log def init(node, start, end): # 리프 노드임 if start == end: tree[node] = nums[start] return tree[node] else: # bottom -> top 방식으로 내려가면서 값을 구하고 그 값을 올려줘서 더해줌 tree[node] = init(node*2, start, (start+end)//2) + init(node*2+1, (start+end)//2+1, end) return tree[node] def sub_sum(node, start, end, left, right): # 탐색 구간이 벗어난 경우는 0을 return if left > end or right < st..
백준 11003 최솟값 찾기 (파이썬)
2022. 12. 3. 21:56
백준
풀이 및 해설(주석) import sys; from collections import deque; import heapq def solve(): # 첫 번째 D는 정해졌으니 인덱스 1부터 시작 for i in range(1, N): val = fir_nums[i] # Q의 맨 뒤의 값이 현재 값보다 크다면 계속 pop while Q and Q[-1] > val: Q.pop() # 나보다 큰놈 다 뺏으면 내가 들어감 (내가 제일 작은놈임) Q.append(val) # 이 부분이 좀 힘들었는데 L이 3이고 arr가 [1, 2, 2, 3..] 이고 3번째 인덱스 즉 3일 때 # Q는 [1, 2, 2, 3]이 된다. 이때 제일 작은놈(0번째 인덱스)가 1인데 이놈을 i-L번째 인덱스와 비교해서 같으면 빼줘야됨 ..
백준 16930 달리기 (파이썬)
2022. 12. 3. 15:47
백준
풀이 import sys; from collections import deque def solve(sr, sc, er, ec): Q = deque() Q.append((sr, sc)) # 거리 저장할 배열 dist = [[-1] * M for _ in range(N)] # 출발점 0으로 초기화 dist[sr][sc] = 0 while Q: r, c = Q.popleft() for di, dj in [(1, 0), (-1, 0), (0, 1), (0, -1)]: for i in range(1, L + 1): nr, nc = r + (di * i), c + (dj * i) # 도착점에서 return if nr == er and nc == ec: return dist[r][c] + 1 # 경계를 벗어나거나, ..
백준 5430 AC (파이썬)
2022. 12. 1. 22:01
백준
풀이 및 해설(주석) import sys; from collections import deque; import re for tc in range(int(sys.stdin.readline().strip())): func = sys.stdin.readline().strip() N = int(sys.stdin.readline().strip()) # 일단 [1, 2, 3, 4]이런식으로 입력오는 것을 문자열로 다 받음 info = sys.stdin.readline().strip() # re.sub를 사용해서 숫자 아닌 것을 공백으로 바꿔줌 new_info = re.sub(r"[^0-9]", " ", info) # strip사용해서 좌우 공백 없애줌 new_info = new_info.strip() # 이제 '1..