목록Algorithms (64)
# m 열 n 행 # (1,1) (m,n) def solution(m, n, puddles): dp = [[0]*(m+1) for _ in range(n+1)] # 웅덩이 체크 -> -1 for x, y in puddles: dp[y][x] = -1 # 세로줄 채우기 for y in range(1, n+1): # 이전 값이 웅덩이이면 종료 if dp[y-1][1] == -1: break else: dp[y][1] = 1 # 가로줄 채우기 for x in range(1, m+1): if dp[1][x-1] == -1: break else: dp[1][x] = 1 for i in range(2, n+1): for j in range(2, m+1): if dp[i][j] == -1: continue # 둘다 ..
def rotate(maps): return [list(reversed(i)) for i in zip(*maps)] def solution(key, lock): hole = 0 # hole 개수 총합 for y in range(len(lock)): for x in range(len(lock[0])): if lock[y][x] == 0: hole += 1 for _ in range(4): # 길이가 3 인경우 -2 ~ 5 for start_y in range(-len(key)+1, len(lock)): for start_x in range(-len(key)+1, len(lock[0])): # 자물쇠와 lock 일치하는 개수 ck = 0 match = True for y in range(start_y, st..
https://www.acmicpc.net/problem/11055 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수� www.acmicpc.net from copy import deepcopy n = int(input()) a = list(map(int, input().split())) # dp[i] : i 까지 왔을 때, 합의 최대 dp = deepcopy(a) rev = [i for i in range(n)] idx = 0 # 현재위치 # for i in range(1, n):..
https://www.acmicpc.net/problem/2167 2167번: 2차원 배열의 합 첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는 � www.acmicpc.net # 누적합 - 합들의 누적을 미리 구해놓는 것 a = [i for i in range(10)] print(a) for i in range(1, 10): a[i] = a[i-1] + a[i] print(a) # dp[i] = i 까지의 합 # i 부터 j 까지의 합은 dp[i] - dp[i-1] ------- 풀이: # 2 차원 배열의 누적합 n, m = map(in..
https://www.acmicpc.net/problem/17406 17406번: 배열 돌리기 4 크기가 N×M 크기인 배열 A가 있을때, 배열 A의 값은 각 행에 있는 모든 수의 합 중 최솟값을 의미한다. 배열 A가 아래와 같은 경우 1행의 합은 6, 2행의 합은 4, 3행의 합은 15이다. 따라서, 배열 A의 www.acmicpc.net from copy import deepcopy n, m, k = map(int, input().split()) a = [list(map(int, input().split())) for _ in range(n)] q = [list(map(int, input().split())) for _ in range(k)] dx, dy = [1,0,-1,0], [0,-1,0,1] ..
https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net from copy import deepcopy n = int(input()) board = [list(map(int, input().split())) for _ in range(n)] # logic 생각 # 상하좌우 이동이 아닌 맵의 방향을 바꿔가면서 한방향으로만 보내는 방식으로 생각 # 90도 회전 def rotate(b, n): nb = deepcopy(b) for..