N,M,K = map(int,input().split()) # N 은 격자 # M 은 상어의 수 # K 은 이동횟수 sharks = {} arr = [] smell = {} for x in range(N): input_list = list(map(int,input().split())) for y in range(N): if input_list[y]: sharks[input_list[y]] = (x,y) smell[(x,y)] = [K,input_list[y]] arr.append(input_list) # 0 위 1 아래 2 왼쪽 3 오른쪽 shark_input_move = list(map(int,input().split())) ind = 1 for shark_init_move in shark_input_move: sharks[ind] = (*sharks[ind],shark_init_move-1) ind += 1 shark_move = [[],] for _ in range(M): temp = [] for x in range(4): move_input = list(map(lambda x : x-1,map(int,input().split()))) temp.append(move_input) shark_move.append(temp) time = 0 dx = [-1,1,0,0] dy = [0,0,-1,1] while time <= 1000: move_shark = {} new_smell = {} for shark_num in sorted(sharks.keys()): x,y,dire = sharks[shark_num] shark_move_direction = [] for i in shark_move[shark_num][dire]: nx = x + dx[i] ny = y + dy[i] if 0 <= nx <N and 0<=ny <N: if not smell.get((nx,ny)): shark_move_direction = (nx,ny,i) break else: new_dire_list = shark_move[shark_num][dire] for new_dire in new_dire_list: nx = x + dx[new_dire] ny = y + dy[new_dire] if 0<=nx<N and 0<=ny<N: if smell[(nx,ny)][1] == shark_num: shark_move_direction = (nx,ny,new_dire) break if not new_smell.get((nx,ny)): new_smell[(nx,ny)] = [K,shark_num] move_shark[shark_num] = shark_move_direction for position in smell.keys(): if not new_smell.get(position): if smell[position][0]-1>0: new_smell[position] = [smell[position][0]-1,smell[position][1]] time += 1 print(move_shark) print(new_smell) if time == 14: break if len(move_shark.keys()) == 1: break sharks = {} for shark_num in move_shark.keys(): sharks[shark_num] = move_shark[shark_num] smell = {position : new_smell[position] for position in new_smell.keys()} print(-1 if time == 1001 else time)
N,M,K = map(int,input().split()) # N 은 격자 # M 은 상어의 수 # K 은 이동횟수 sharks = {} arr = [] smell = {} for x in range(N): input_list = list(map(int,input().split())) for y in range(N): if input_list[y]: sharks[input_list[y]] = (x,y) smell[(x,y)] = [K,input_list[y]] arr.append(input_list) # 0 위 1 아래 2 왼쪽 3 오른쪽 shark_input_move = list(map(int,input().split())) ind = 1 for shark_init_move in shark_input_move: sharks[ind] = (*sharks[ind],shark_init_move-1) ind += 1 shark_move = [[],] for _ in range(M): temp = [] for x in range(4): move_input = list(map(lambda x : x-1,map(int,input().split()))) temp.append(move_input) shark_move.append(temp) time = 0 dx = [-1,1,0,0] dy = [0,0,-1,1] while time <= 1000: move_shark = {} new_smell = {} for shark_num in sorted(sharks.keys()): x,y,dire = sharks[shark_num] shark_move_direction = [] my_shark_move_direction = [] my_smell_move = True for i in shark_move[shark_num][dire]: nx = x + dx[i] ny = y + dy[i] if 0 <= nx <N and 0<=ny <N: if not smell.get((nx,ny)): shark_move_direction = (nx,ny,i) break elif my_smell_move and smell[(nx,ny)][1] == shark_num: my_smell_move = False my_shark_move_direction = (nx,ny,i) else: shark_move_direction = my_shark_move_direction[:] if not new_smell.get((shark_move_direction[0],shark_move_direction[1])): new_smell[(shark_move_direction[0],shark_move_direction[1])] = [K,shark_num] move_shark[shark_num] = shark_move_direction for position in smell.keys(): if not new_smell.get(position): if smell[position][0]-1>0: new_smell[position] = [smell[position][0]-1,smell[position][1]] time += 1 if len(move_shark.keys()) == 1: break sharks = {} for shark_num in move_shark.keys(): sharks[shark_num] = move_shark[shark_num] smell = {position : new_smell[position] for position in new_smell.keys()} print(-1 if time == 1001 else time)
'알고리즘 > 백준_복기_미완료' 카테고리의 다른 글
[BOJ/백준] 6443 애너그램 (0) | 2021.05.07 |
---|---|
[BOJ/백준] 19238 스타트 택시 (0) | 2021.05.06 |
[BOJ/백준] 19236 청소년 상어 (0) | 2021.05.06 |
[BOJ/백준] 18222 투에-모스 문자열 (0) | 2021.05.06 |
[BOJ/백준] 17837 새로운 게임 2 (0) | 2021.05.06 |