목록백준 (60)
컴공생의 다이어리
백준 4386번 : 별자리 만들기 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline def find_parent(parent, x): if parent[x] != x: parent[x] = find_parent(parent, parent[x]) return parent[x] def union(parent, a, b): a = find_parent(parent, a) b = find_parent(parent, b) if a < b: parent[b] = a else: parent[a] = b n = int(input()) # 별의 개수 stars = [tuple(map(float, input().split())) for _ in range(n)] # 별의 좌표 ..
백준 14621번 : 나만 안되는 연애 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline def find_parent(parent, x): if parent[x] != x: parent[x] = find_parent(parent, parent[x]) return parent[x] def union(parent, a, b): a = find_parent(parent, a) b = find_parent(parent, b) if a < b: parent[b] = a else: parent[a] = b n, m = map(int, input().split()) # n : 학교의 수, m : 도로의 개수 univ = list(input().split()) # 대학교 정..
백준 4097번 : 수익 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline while n := int(input()): arr = list(int(input()) for _ in range(n)) # 수익 리스트 for i in range(1, n): arr[i] = max(arr[i], arr[i] + arr[i - 1]) print(max(arr))
백준 20922번 : 겹치는 건 싫어 (문제 바로가기) 내 코드 import sys from collections import defaultdict input = sys.stdin.readline n, k = map(int, input().split()) arr = list(map(int, input().split())) max_len = 0 left, right, count = 0, 0, defaultdict(int) while right < n: if count[arr[right]] < k: count[arr[right]] += 1 right += 1 else: count[arr[left]] -= 1 left += 1 max_len = max(max_len, right - left) print(max..
백준 2003번 : 수들의 합 2 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline n, m = map(int, input().split()) arr = list(map(int, input().split())) cnt, temp_sum, left = 0, 0, 0 for right in range(n): temp_sum += arr[right] while temp_sum > m: # 지금까지 합이 m보다 크다면 temp_sum -= arr[left] # 구했던 합의 제일 왼쪽에서 값 삭제 left += 1 if temp_sum == m: cnt += 1 print(cnt)
백준 16507번 : 어두운 건 무서워 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline r, c, q = map(int, input().split()) arr = [list(map(int, input().split())) for _ in range(r)] sum_arr = [[0] * (c + 1) for _ in range(r + 1)] for i in range(1, r + 1): for j in range(1, c + 1): sum_arr[i][j] = sum_arr[i - 1][j] + sum_arr[i][j - 1] + arr[i - 1][j - 1] - sum_arr[i - 1][j - 1] for _ in range(q): r1, c1, r2, ..
백준 1024번 : 수열의 합 (문제 바로가기) 내 코드 n, l = map(int, input().split()) # 수식 # n = (x+1) + (x+2) + ... + (x+l) # n = lx + l(l+1)/2 # lx = n - l(l+1)/2 for i in range(l, 101): x = n - i * (i + 1) / 2 if x % i == 0: x = int(x / i) if x >= -1: print(*list(range(x + 1, x + i + 1))) break else: print(-1)
백준 12851번 : 숨바꼭질 2 (문제 바로가기) 내 코드 from collections import deque n, k = map(int, input().split()) visited = [[-1, 0]] * 100001 visited[n] = [0, 1] queue = deque([n]) while queue: # bfs 수행 pos = queue.popleft() for next_pos in (pos - 1, pos + 1, pos * 2): if 0
백준 16948번 : 데스 나이트 (문제 바로가기) 내 코드 import sys from collections import deque input = sys.stdin.readline n = int(input()) r1, c1, r2, c2 = map(int, input().split()) cnt = 0 arr = [[-1] * n for _ in range(n)] # -1로 초기화 arr[r1][c1] = 0 # 시작 지점을 0으로 세팅 queue = deque([(r1, c1)]) directions = [(-2, -1), (-2, 1), (0, -2), (0, 2), (2, -1), (2, 1)] while queue: # bfs 수행 r, c = queue.popleft() for rr, cc in..
백준 10986번 : 나머지 합 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline n, m = map(int, input().split()) # n : 숫자 갯수, m : 나눌 수 num = list(map(int, input().split())) + [0] # 숫자 입력 r = [0] * m # 누적합을 m으로 나눴을 때의 나머지가 index이고 그 값에 count for i in range(n): num[i] += num[i - 1] # 숫자 정보를 누적합으로 갱신 r[num[i] % m] += 1 # 해당 누적합을 m으로 나눴을 때의 나머지에 해당하는 값에 1추가 cnt = r[0] # 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수 for ..