-
[백준] 17143 - 낚시왕Algorithm 문제 2019. 7. 25. 16:52
https://www.acmicpc.net/problem/17143
17143번: 낚시왕
낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. 칸에는 상어가 최대 한 마리 들어있을 수 있다. 상어는 크기와 속도를 가지고 있다. 낚시왕은 처음에 1번 열의 한 칸 왼쪽에 있다. 다음은 1초 동안 일어나는 일이며, 아래 적힌 순서대로 일어난다. 낚시왕은 가장 오른쪽 열의 오른쪽 칸에 이동하
www.acmicpc.net
시뮬레이션 유형의 문제.
python dict를 사용해서 상어의 삭제를 구현했다.
상어가 다른 상어를 잡아먹기 때문에, 동일한 칸에 위치하는지는 이동 후의 상어들끼리만 확인하거나 모든 상어가 이동한 후에 확인해야 한다.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374import syslines = sys.stdin.readlines()R, C, m = tuple(map(int, lines[0].split()))dr, dc = [0, -1, 1, 0, 0], [0, 0, 0, 1, -1]reverse_dir = [0, 2, 1, 4, 3]sharks = {}pos = [[-1 for _ in range(C)] for _ in range(R)]for n, line in enumerate(lines[1:]):r, c, s, d, z = tuple(map(int, line.split()))sharks[n] = (r, c, s, d, z)pos[r-1][c-1] = nre = 0for depth in range(R):if pos[depth][0] != -1:re += sharks[pos[depth][0]][4]del sharks[pos[depth][0]]pos[depth][0] = -1breakfor col in range(1, C):# moveeaten = []pos_tmp = [[-1 for _ in range(C)] for _ in range(R)]for k in sharks.keys():r, c, s, d, z = sharks[k]c += (dc[d] * s) % (2 * (C - 1))r += (dr[d] * s) % (2 * (R - 1))for _ in range(2):if c < 1:c = 2 - cd = reverse_dir[d]elif c > C:c = 2 * C - cd = reverse_dir[d]elif r < 1:r = 2 - rd = reverse_dir[d]elif r > R:r = 2 * R - rd = reverse_dir[d]sharks[k] = (r, c, s, d, z)if pos_tmp[r-1][c-1] != -1:other = pos_tmp[r-1][c-1]if z > sharks[other][4]:eaten.append(other)pos_tmp[r-1][c-1] = kelse:eaten.append(k)else:pos_tmp[r-1][c-1] = kfor e in eaten:del sharks[e]pos = pos_tmp# catchfor depth in range(R):if pos[depth][col] != -1:re += sharks[pos[depth][col]][4]del sharks[pos[depth][col]]pos[depth][col] = -1breakif len(sharks) == 0:breaksys.stdout.write(str(re))cs 'Algorithm 문제' 카테고리의 다른 글
[백준] 12766 - 지사 배정 (0) 2019.11.26 [백준] 17142 - 연구소 3 (0) 2019.07.28 [백준] 16234 - 인구 이동 (0) 2019.07.23 [백준] 15683 - 감시 (0) 2019.07.22 [백준] 14889 - 스타트와 링크 (0) 2019.07.17