목록전체 글 (45)
코딩 공부

[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..

1. 어차피 뱀과 사다리는 서로 정확히 겹치는 경우가 없으므로 시작과 끝이 Key - Value로 정해져 있는 것과 마찬가지이므로 info라는 dictionary를 만들어줘서 관리한다.2. 만일, 뱀이나 사다리를 타고 이동했을 때 방문했던 곳이라면 무한 반복이 가능하므로 visited라는 방문 배열을 하나 만들어 관리한다.3. BFS방법을 이용해 1~6칸을 이동하는 주사위 굴리기의 최솟값을 구할 수 있을 것 같다.from collections import dequedef bfs(): q = deque() q.append(1) # 1번 칸에서 시작 cnt = 0 # 주사위 굴리는 횟수 while q: cnt += 1 for _ in range(len(q)): ..

14890번: 경사로 (acmicpc.net)한 칸씩 스캔하면서 "앞쪽 블록 > 뒤쪽 블록"일 경우와 "앞쪽 블록 이때, 높이 차이가 1을 초과하거나 경사로를 뒀을 때 범위 밖으로 튀어나간다면 조건에 부합하지 않음을 고려했고, 또한 경사로를 놓는 위치들은 모두 높이 값이 같아야 함을 유의함.def sol(): global count visited = [[0] * N for _ in range(N)] for i in range(N): flag = False for j in range(N-1): # 앞 > 뒤 if abs(arr[i][j] - arr[i][j+1]) > 1: # 높이 차가 1 초과라면 ..