본문 바로가기

Algorithm(CodeTree, Python)127

[코드트리] 쌓인 숫자의 순차적 이동 Python 3차원 배열로 해결했다. # n, m 입력 n, m = map(int, input().split()) # grid 입력 grid = [ list(map(int, input().split())) for _ in range(n) ] # orders 입력 orders = list(map(int, input().split())) # 함수들 # is_empty(x, y) def is_empty(x, y): return not len(next_grid[x][y]) # in_range(x, y) def in_range(x, y): return 0 3차원 배열 next_grid = [ [[] for _ in range(n)] for _ in range(n) ] for i in range(n): for j in rang.. 2023. 1. 25.
[코드트리] 숫자의 순차적 이동 Python # n, m 입력 n, m = map(int, input().split()) # grid 입력 grid = [ list(map(int, input().split())) for _ in range(n) ] # in_range(x, y) def in_range(x, y): return 0 2023. 1. 25.
[코드트리] 벽이 있는 충돌 실험 Python # t 입력 t = int(input()) # 함수들 # in_range(x, y) def in_range(x, y): return 0 2023. 1. 24.
[코드트리] 숫자가 가장 큰 인접한 곳으로 동시에 이동 Python # n, m, t 입력 n, m, t = map(int, input().split()) # grid 입력 grid = [ list(map(int, input().split())) for _ in range(n) ] # count count = [ [0] * n for _ in range(n) ] for _ in range(m): sx, sy = map(int, input().split()) sx, sy = sx - 1, sy - 1 count[sx][sy] = 1 # 함수들 # in_range(x, y) def in_range(x, y): return 0 max_num: # max_num, ax, ay 바꿔주기 max_num, ax, ay = grid[nx][ny], nx, ny # next_count .. 2023. 1. 24.
[코드트리] 핀볼게임 Python # n 입력 n = int(input()) # grid 입력 grid = [ list(map(int, input().split())) for _ in range(n) ] # 함수들 # in_range(x, y) def in_range(x, y): return 0 2023. 1. 23.
[코드트리] 벽 짚고 미로 탈출하기 Python 자기자리로 돌아오는 것을 바로 -1 처리했었는데, 잘 생각해보면 4번까지는 지켜봐줘야 한다. # n 입력 n = int(input()) # sx, sy 입력 sx, sy = map(int, input().split()) sx, sy = sx - 1, sy - 1 # maze maze = [ input() for _ in range(n) ] # 함수들 # next_is_empty_without_wall(x, y, d) def next_is_empty_without_wall(x, y, d): # nx, ny nx, ny = x + dxs[d], y + dys[d] # nd nd = (d + 1) % 4 # nxr, nyr nxr, nyr = nx + dxs[nd], ny + dys[nd] # 다음 위치가 범.. 2023. 1. 22.
[코드트리] 떨어지는 1자 블록 Python # n, m, k 입력 n, m, k = map(int, input().split()) k -= 1 # grid 입력 grid = [ list(map(int, input().split())) for _ in range(n) ] # 함수들 # get_dist(c) def get_dist(c): for r in range(n): # 블록이 있으면 if grid[r][c] == 1: # 반환 return r # 바닥에 닿는 경우 return n # get_drop_dist(s, e) def get_drop_dist(s, e): # dist_list dist_list = [] # 떨어질 블록 기준 for i in range(s, e): dist_list.append(get_dist(i)) # 반환 return .. 2023. 1. 22.
[코드트리] 주사위 던지기 Python # n, m, r, c 입력 n, m, r, c = map(int, input().split()) r -= 1 c -= 1 # orders orders = list(input().split()) # 함수들 # in_range(x, y) def in_range(x, y): return 0 2023. 1. 21.
[코드트리] 숫자가 더 큰 인접한 곳으로 이동 Python # n, r, c 입력 n, r, c = map(int, input().split()) r -= 1 c -= 1 # grid 입력 grid = [ list(map(int, input().split())) for _ in range(n) ] # 함수들 # in_range(x, y) def in_range(x, y): return 0 2023. 1. 21.
[코드트리] 최적의 십자 모양 폭발 Python # n 입력 n = int(input()) # grid 입력 grid = [ list(map(int, input().split())) for _ in range(n) ] # 함수들 # pairs_num_of(bombed_grid) def pairs_num_of(bombed_grid): # pair_cnt pair_cnt = 0 # 완전 탐색 for i in range(n): for j in range(n): # 숫자가 있다면, if bombed_grid[i][j]: dxs, dys = [-1, 1, 0, 0], [0, 0, -1, 1] for dx, dy in zip(dxs, dys): nx, ny = i + dx, j + dy # 범위 내에 있고, 짝이 있으면 if in_range(nx, ny) and.. 2023. 1. 20.
[코드트리] 단 한 번의 2048 시도 Python # grid 입력 grid = [ list(map(int, input().split())) for _ in range(4) ] # order 입력 order = input() # 함수들 # do_merge(o) def do_merge(o): # 오른쪽으로 밀었다면, if o == 'R': # 전체 행을 조사 for i in range(4): # 각 행에서 for j in range(3, 0, -1): # 앞뒤가 같은 부분이 있으면, if grid[i][j] == grid[i][j-1]: # 해당 부분은 2배가 되고, grid[i][j] = grid[i][j] * 2 # 다음 부분은 0이됨 grid[i][j-1] = 0 # 다시 밀기 push(o) # 왼쪽으로 밀었다면, elif o == 'L': # 전체.. 2023. 1. 19.
[코드트리] 십자 모양 폭발 Python # n 입력 n = int(input()) # grid 입력 grid = [ list(map(int, input().split())) for _ in range(n) ] # bomb_x, bomb_y bomb_x, bomb_y = map(int, input().split()) bomb_x -= 1 bomb_y -= 1 # 함수들 # make_drop(curr_col) def make_drop(curr_col): # temp_col temp_col = [] for r in range(n-1, -1, -1): # 숫자가 있으면, if grid[r][curr_col]: temp_col.append(grid[r][curr_col]) # shortage shortage = n - len(temp_col) # 부족.. 2023. 1. 19.
[코드트리] 1차원 폭발 게임 Python 코드가 너무 덕지덕지 ;; m == 1일때와 1 이상일때를 따로 처리해주었다. 뭔가 더 잘 풀 방법이 있을 꺼같은데 # n, m 입력 n, m = map(int, input().split()) # bombs 입력 bombs = [ int(input()) for _ in range(n) ] # 함수들 # get_eliminate_index(curr_bombs) def get_eliminate_index(curr_bombs): # eliminate_index eliminate_index = [] # cnt cnt = 1 for i in range(len(curr_bombs) - 1): # 불연속이고, cnt가 m 이상이면 if curr_bombs[i] != curr_bombs[i+1] and cnt >= m.. 2023. 1. 18.
[코드트리] 1차원 젠가 Python # n 입력 n = int(input()) # jenga 입력 jenga = [ int(input()) for _ in range(n) ] # take_outs 입력 take_outs = [ tuple(map(int, input().split())) for _ in range(2) ] # 함수들 # eliminate(s_p, e_p) def eliminate(s_p, e_p): # 전역 변수 선언 global jenga # temp temp = [] # curr_len curr_len = len(jenga) for i in range(curr_len): # 제거하는 범위 내면, if s_p 2023. 1. 18.
[코드트리] 최단 Run Length 인코딩 Python # a 입력 a = input() # 함수들 # get_encoded_len(string) def get_encoded_len(string): # curr_cnt curr_cnt = 1 # cnt_list cnt_list = [] # 전체를 돌며, for i in range(len(string) - 1): # 다음 것과 같으면 if string[i] == string[i+1]: # curr_cnt 올려주기 curr_cnt += 1 # 다음 것과 다르면 else: # curr_cnt cnt_list에 추가 (문자열로) cnt_list.append(str(curr_cnt)) # curr_cnt 초기화 curr_cnt = 1 # 마지막 cnt까지 추가 (문자열로) cnt_list.append(str(curr_.. 2023. 1. 17.
[코드트리] 삼각형 컨베이어 벨트 Python # n, t 입력 n, t = map(int, input().split()) # tirangle tirangle = [ list(map(int, input().split())) for _ in range(3) ] # 함수들 # simulate() def simulate(): # temp_1, temp_2, temp_3 temp_1, temp_2, temp_3 = tirangle[0][-1], tirangle[1][-1], tirangle[2][-1] # 옮겨주기 for i in range(n-1, 0, -1): tirangle[0][i] = tirangle[0][i-1] tirangle[1][i] = tirangle[1][i-1] tirangle[2][i] = tirangle[2][i-1] # temp .. 2023. 1. 17.
[코드트리] 2차원 바람 Python # n, m, q 입력 n, m, q = map(int, input().split()) # grid 입력 grid = [ list(map(int, input().split())) for _ in range(n) ] # winds 입력 winds = [] for _ in range(q): r1, c1, r2, c2 = map(int, input().split()) r1, c1, r2, c2 = r1 - 1, c1 -1, r2 - 1, c2 -1 winds.append((r1, c1, r2, c2)) # 함수들 # in_range(x, y) def in_range(x, y): return 0 2023. 1. 16.
[코드트리] 1차원 바람 Python # n, m, q 입력 n, m, q = map(int, input().split()) # building building = [ list(map(int, input().split())) for _ in range(n) ] # winds 입력 winds = [] for _ in range(q): r, d = input().split() r = int(r) winds.append((r, d)) # 함수들 # down_simulate(curr_row, curr_dir) def down_simulate(curr_row, curr_dir): # 왼쪽으로부터의 바람이면 if curr_dir == 'L': # temp temp = building[curr_row][-1] # 옮겨주기 for i in range(m-.. 2023. 1. 15.