'삼성 SW 역량 테스트' 기출 문제 입니다. 😀
문제 👉 17143번: 낚시왕
1. 문제
- R*C 크기의 격자판에서 낚시왕은 가장 왼쪽 열부터 오른쪽 끝까지 이동한다.
- 낚시왕이 오른쪽으로 한 칸 이동한다.
- 낚시왕이 있는 열에 있는 상어 중에서 땅과 제일 가까운 상어를 잡는다. 상어를 잡으면 격자판에서 잡은 상어가 사라진다.
- 상어가 이동한다.
- 상어는 입력으로 주어진 속도로 이동하고, 속도의 단위는 칸/초이다. 상어가 이동하려고 하는 칸이 격자판의 경계를 넘는 경우에는 방향을 반대로 바꿔서 속력을 유지한채로 이동한다.
- 상어가 이동을 마친 후 한 칸에 상어가 두 마리 이상 있을 경우 크기가 가장 큰 상어만 남는다.
- 낚시왕이 잡은 상어 크기의 합을 출력한다.
2. 풀이
시뮬레이션
를 이용한 문제 풀이
- 낚시왕이 상어를 잡아먹는 함수를 구현한다.
- 상어가 이동하는 함수를 구현한다.
- 상어가 원래 자리로 돌아오는 경우 2*(n-1)이다.
- 상어의 위치와 속도를 더해 n보다 크거나 같을 경우 방향 전환
- 상어의 위치와 속도를 더한 값이 n-1로 나누었을 때 몫이 홀수이면 방향 전환
3. 코드
R, C, M = map(int, input().split())
a = [[0] * C for _ in range(R)]
que = []
for _ in range(M):
r, c, s, d, z = map(int, input().split())
a[r-1][c-1] = [s, d, z]
que.append([r-1, c-1])
di = [[-1,0],[1,0],[0,1],[0,-1]] # 상하우좌
def solution():
global a, que
ret, pi, pj = 0, -1, -1
def direction(d):
if d == 1: return 2
elif d == 2: return 1
elif d == 3: return 4
else: return 3
for col in range(C):
# fishing
for i in range(R):
if a[i][col]:
ret += a[i][col][2]
a[i][col] = 0
pi, pj = i, col
break
# moving
arr = [[0] * C for _ in range(R)]
que2 = []
for i, j in que:
if i == pi and j == pj:
continue
s, d, z = a[i][j][0], a[i][j][1], a[i][j][2]
if d < 3: # up/down
ni, nj = i + s * di[d-1][0], j
if not 0 <= ni < R:
temp = s
if d == 1: # 상
s -= i
i = 0
else: # 하
s -= R-1 - i
i = R-1
d = direction(d) # 방향전환
xx, yy = divmod(s, R-1)
if xx % 2 == 0:
if i == 0:
ni = yy # 위에서 아래로
else:
ni = R-1 - yy # 아래서 위로
else: # 반대 방향
if i == 0:
ni = R-1 - yy
else:
ni = yy
d = direction(d) # 방향전환
s = temp
else: # left/right
ni, nj = i, j + s * di[d-1][1]
if not 0 <= nj < C:
temp = s
if d == 3: # 우
s -= C-1 - j
j = C-1
else: # 좌
s -= j
j = 0
d = direction(d)
xx, yy = divmod(s, C-1)
if xx % 2 == 0:
if j == 0:
nj = yy
else:
nj = C-1 - yy
else:
if j == 0:
nj = C-1 - yy
else:
nj = yy
d = direction(d)
s = temp
if arr[ni][nj]:
if z > arr[ni][nj][2]: # 더 큰 상어가 있을 때
arr[ni][nj] = [s, d, z]
else:
arr[ni][nj] = [s, d, z]
que2.append([ni, nj])
a = arr
que = que2
return ret
print(solution())
- 결과 : 2232 ms
References
🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋
'Coding Test > BOJ' 카테고리의 다른 글
[백준] 17144 - 미세먼지 안녕! [Python(파이썬)] (0) | 2021.11.22 |
---|---|
[백준] 17142 - 연구소 3 [Python(파이썬)] (0) | 2021.11.22 |
[백준] 17141 - 연구소 2 [Python(파이썬)] (0) | 2021.11.22 |
댓글