본문 바로가기

프로그래밍/백준

(146)
백준 2740 행렬 곱셈 - 파이썬 -풀이. 이 문제는 그냥 행렬 곱셈 연산을 통해서 풀었다. 딱히 행렬 곱셈의 연산만 알고 있다면 다른 풀이는 필요없을것같다. 소스코드. import sys def matrix_multiple(N, K): global matrix1, matrix2, result_matrix for i in range(N): for j in range(K): result_matrix[i][j] = multiple(i, j) # 행렬 곱 연산 def multiple(x, y): result = 0 mat2 = [mat[y] for mat in matrix2] for i, j in zip(matrix1[x], mat2): result += i*j return result N, M = map(int, sys.stdin.readl..
백준 1629 곱셈 - 파이썬 문제. 풀이. 분할정복 알고리즘을 이용하여 지수가 짝수 일때는 n^(지수/2) * n^(지수/2) 를 해주면 되고 지수가 홀 수 일때는 n^((지수-1)/2) * n^((지수-1)/2) * n 을 해주면 된다. 시간이 빡빡하기 때문에 함수 호출을 한번만 이용하여한다. 소스코드. import sys def div_con(num, index): if index == 1: return num % C power = div_con(num, index//2) # 미리 값 구하기 if index%2 == 0: return power * power % C elif index%2 == 1: return power * power * num % C A, B, C = map(int, sys.stdin.readline().sp..
백준 1780 종이의 개수 - 파이썬 문제. 풀이. 쿼드트리를 이용한 방식과 비슷한데 쿼드트리는 4분할로 나눴다면 이 문제는 9분할로 나누기만 하면된다. 그리고 -1, 0, 1 을 구분해서 숫자를 카운트 해주면 된다. 소스코드. import sys def div_con(x, y, n): global count, paper num = paper[x][y] check = 0 for i in range(x, x+n): if check != 0: break for j in range(y, y+n): if num != paper[i][j]: """ 9분할로 나누기 """ div_con(x, y, n//3) div_con(x, y+(n//3), n//3) div_con(x, y+(2*(n//3)), n//3) div_con(x+(n//3), y, n/..
백준 1992 쿼드트리 - 파이썬 문제. 풀이. 저번에 풀었던 색종이접기와 매우 유사하다. 똑같이 분할정복 알고리즘을 이용하여 쿼드트리 방식으로 나눠준다. 0 또는 1 하나로만 이루어지지 않았다면 괄호를 추가하고 분할을 하면 된다. 소스코드. import sys def div_con(x, y, n): global compression, paper color = paper[x][y] check = 0 for i in range(x, x+n): if check != 0: break for j in range(y, y+n): if color != paper[i][j]: compression += '(' # 0, 1 하나로만 이루어지지 않았으면 '(' 추가 div_con(x, y, n//2) # 2사분면 div_con(x, y+(n//2), n..
백준 2630 색종이 만들기 - 파이썬 풀이. 분할정복 알고리즘을 사용해야한다. 전체를 검사하고 나서 조건에 맞지 않는다면 4분면으로 분할하여 제일 작은 부분까지 체크를 하는방식이다. 소스코드. import sys def div_con(x, y, n): global blue, white, paper color = paper[x][y] check = 0 for i in range(x, x+n): if check != 0: break for j in range(y, y+n): if color != paper[i][j]: div_con(x, y, n//2) # 2사분면 div_con(x, y+(n//2), n//2) # 1사분면 div_con(x+(n//2), y , n // 2 ) # 3사분면 div_con(x+(n//2), y+(n//2), n..
백준 11286 절대값 힙 - 파이썬 풀이. 최대 힙을 응용하여서 튜플형식에 (abs(n), n)으로 절대값을 삽입해준다. 소스코드. import sys import heapq N = int(sys.stdin.readline()) queue = [] for i in range(N): n = int(sys.stdin.readline()) if n != 0: heapq.heappush(queue, (abs(n), n)) elif n == 0: try: print(heapq.heappop(queue)[1]) except: print(0)
백준 1927 최소 힙 - 파이썬 풀이. 파이썬에서 제공하는 heapq 라이브러리를 이용하면 매우 간단하게 풀 수 있다. 소스코드. import sys import heapq N = int(sys.stdin.readline()) queue = [] for i in range(N): n = int(sys.stdin.readline()) if n >= 1: heapq.heappush(queue, n) elif n == 0: try: print(heapq.heappop(queue)) except: print(0)
백준 11279 최대힙 - 파이썬 풀이. 파이썬의 heapq 라이브러리를 사용했는데 heapq라이브러리는 기본적으로 최소힙이다. 즉 최대힙을 사용하려면 heappush를 할때 (-n, n)의 튜플 형태로 넣어서 문제를 풀어야한다. 소스코드. import sys import heapq N = int(sys.stdin.readline()) queue = [] for i in range(N): n = int(sys.stdin.readline()) if n >= 1: heapq.heappush(queue, (-n, n)) elif n == 0: try: print(heapq.heappop(queue)[1]) except: print(0)