Algorithm(91)
-
[BOJ] 9359 서로소 python
이 문제를 풀면서 가장 어려운 점 중 하나는, 메모리 관리인 것 같다. 메모리 관리와 시간을 얼마나 잘 활용하느냐에 따라서 이 문제를 풀 수 있는지가 나뉘겠다. 처음 풀었던게 25일전이었다 ... 복기에 꽤 시간이 많이 걸렸던 것 같다. 하여튼, 잘 문제를 풀어서 기분은 꽤 좋은 편이다. 이 문제를 푸는 과정에 있어서 주의해야할 과정이 있다 (메모리와 시간 관리에 있어서) 첫번째로, def prime_set(n): if n == 2: return [2] if n == 3: return [3] prime = [] t = int(math.sqrt(n)) + 1 num = [False for i in range (0,t+1)] for i in range (2,t+1): if num[i] == False: pr..
2024.03.31 -
[BOJ] 3964 팩토리얼과 거듭제곱 Python
K를 소인수분해한 뒤, 각각의 소인수가 몇번 곱해져있는지를 defaultdict를 통해서 저장한다... 인데, defaultdict을 안썼구나. 컨트롤이 어려웠던 부분은 처음 소인수분해 부분이었던 것 같다. 먼저, 2의 배수인지 판별한 뒤에, while에서 조금 테크닉을 사용했다. int(sqrt ...) + 1까지 나눠봤을 때, 안 나눠진다면 그 친구는 소수라고 정의 하는것이 주효하게 사용되는 것 같다. from collections import defaultdict T = int(input()) for _ in range (0,T): N,K = map(int,input().split()) #primeset을 통해 K를 나누는 소인수 집합을 구할 예정 prime_set = {} if K % 2 == 0..
2024.03.18 -
[BOJ] 1149 RGB 거리 python
N = int(input()) paint = [] for _ in range (0,N): painting = list(map(int,input().split())) paint.append(painting) dp1 = [0 for _ in range (0,N)] #idx 0부터 시작하는 경우 dp2 = [0 for _ in range (0,N)] #idx 1부터 시작하는 경우 dp3 = [0 for _ in range (0,N)] #idx 2부터 시작하는 경우 idx = 0 for i in range (0,N): if i == 0: dp1[i],dp2[i],dp3[i] = paint[i][0],paint[i][1],paint[i][2] else: dp1[i] = min(dp2[i-1], dp3[i-1]) ..
2024.03.12 -
[BOJ] 백준 18111 마인크래프트 Python
N,M,B = map(int,input().split()) land = [] height_min = 1e9 entire_block = B for _ in range (0,N): a = list(map(int,input().split())) land.append(a) entire_block += sum(a) height_min = min(height_min, min(a)) k = (entire_block // (N * M)) ans = [] k = min(k, 256) for height in range (height_min,k+1): time = 0 for i in range (0,N): for j in range (0,M): if land[i][j] < height: #쌓아야함 time += (heig..
2024.02.29 -
[BOJ] 2252 줄 세우기 Python
위상정렬 (topological sort)에 대한 내용이 나왔다. 복습으로서는 굉장히 좋을 것 같다 ! from collections import deque N,M = map(int,input().split()) graph = [[] for _ in range (0,N+1)] ind = [0 for _ in range (0,N+1)] for _ in range (0,M): a,b = map(int,input().split()) graph[a].append(b) ind[b] += 1 deq = deque() for i in range (0,N+1): #진입차수가 0인 친구들 먼저 추가 (끝에 있는 친구들부터) if ind[i] == 0: deq.appendleft(i) ans = [] while deq: ..
2024.02.28 -
[BOJ] 1132 합 (Python)
from collections import defaultdict N = int(input()) d = defaultdict(int) for i in range (0,12): d[chr(i + 65)] = 0 #각각의 인덱스 저장 cant_zero = [] for i in range (0,N): s = input() #입력되는 문자 n = len(s) for j in range (0,n): if j == 0: cant_zero.append(s[j]) d[s[j]] += 10 ** (n - 1 - j) spell = [] for i in range (0,12): if d[chr(i + 65)] != 0: spell.append([chr(i+65) , d[chr(i + 65)]]) spell.sort(reve..
2024.02.27