목록파이썬 (21)
코딩 공부

[1] 끝 테두리부터 하나의 배열로 따준다.[2] 배열의 순서대로 두 값을 변경해준다.[3] 만일 회전의 수가 너무 크다면 중복이 되므로 실행 속도를 줄이기 위해 고려해본다.앞뒤의 배열 값을 바꿔주는 것을 회전의 수만큼 반복한다.N, M, R = map(int, input().split())arr = [list(map(int, input().split())) for _ in range(N)]directions = {0:(-1, 0), 1:(0, 1), 2:(1, 0), 3:(0, -1)}visited = [[0]*M for _ in range(N)]si, sj = 0, 0while True: # 종료조건 if visited[si][sj]: break visited[si][sj] = 1 ..

[1] 그림에 있는 그대로 블록을 1로 빈 공간을 0으로 2차원 배열을 만든다.[2] 위에서부터 한 줄씩 차례로, 블록과 블록 사이에 있는 물을 더해준다.H, W = map(int, input().split())lst = list(map(int, input().split()))arr = [[0]*W for _ in range(H)]# 2차원 배열 구현for j in range(W): for i in range(H-1, H-lst[j]-1, -1): arr[i][j] = 1 total = 0for i in range(H): temp = 0 for j in range(W-1): if arr[i][j] == 1: for k in rang..

[1] 빙산이 2개의 덩이로 분리되거나 다 녹을 때까지 분리되지 않는다면 끝인 종료 조건을 생각한다.[2] 빙산이 있는 칸들은 BFS를 통해 각각 녹는 높이를 계산(사방 0인 칸의 개수)한다.from collections import dequedef bfs(si, sj): q = deque() q.append((si, sj)) visited[si][sj] = 1 candidates = [] while q: ci, cj = q.popleft() cnt = 0 for di, dj in ((-1, 0), (0, 1), (1, 0), (0, -1)): ni = ci + di nj = cj + dj ..

[1] 배열 arr을 만들고, 빈공간 '.'이 아닐 경우 bfs를 통해 같은 색의 뿌요들이 4개 이상 모여있는지 확인[2] 4개 이상 모여있을 경우, 뿌요들을 터뜨려 빈공간 '.'으로 변경 + 터진 이력이 있으므로 flag = True로 변경[3] 중[4] 터진 이력이 없을 경우, flag는 그대로 False이므로 연쇄 중단from collections import dequedef bfs(m, n): global flag q = deque() q.append((m, n)) temp = [(m, n)] # 같은 색깔 연결 정보 visited[m][n] = 1 # 방문 처리 주의! while q: ci, cj = q.popleft() for di, d..

수열의 첫 값도 정해져있고 각 항의 관계도 정의되어 있으므로 그대로 구현하면 되겠다. 결국 A[N]을 구해야하므로 N+1개의 원소를 갖는 lst를 미리 정의해두고 시작하겠다. 마지막 항인 lst[-1]을 출력한다. # Bottom-Up 방식 N, P, Q = map(int, input().split()) lst = [0]*(N+1) lst[0] = 1 for i in range(1, N+1): lst[i] = lst[i//P] + lst[i//Q] print(lst[-1]) dictionary에 {0:1}을 넣어두고 만일 저장된 값이 있다면 그대로 사용하고, 저장된 값이 없으면 계산해서 새로 저장하는 구조를 그리면 되겠다. 위와 같이 구현하면 재귀 형태가 들어갈 수 밖에 없을 것이다. 그러나 모든 인덱스..

일일히 비교하면 시간 복잡도의 위험이 따르므로 이분탐색법을 이용해준다 인덱스의 중간값을 이용해 찾고자하는 값의 범위를 계속 변경해준다. 만일, 중간 인덱스의 값(lst[mid])이 찾고자 하는 값(num)보다 작다면 start = mid + 1, 중간 인덱스의 값(lst[mid])이 찾고자 하는 값(num)보다 크다면 end = mid - 1 과 같이 변경해준다. 변경 후 start < mid < end 의 관계가 성립하지 않는다면 0을 출력하고 break로 빠져나온다. N = int(input()) lst = list(map(int, input().split())) lst.sort()# 이분 탐색을 하기 위한 정렬 M = int(input()) check = list(map(int, input().sp..