처음 틀린 풀이
from copy import deepcopy
dx = [(0, 0), (-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (1, 1), (0, 1), (-1, 1)]
shark = int(1e9)
def solved():
fish_pos = [[0, 0] for _ in range(17)]
data = [[[0, 0] for _ in range(4)] for _ in range(4)]
for i in range(4):
value = list(map(int, input().split()))
cnt = 0
for j in range(0, 7, 2):
fish_pos[value[j]][0], fish_pos[value[j]][1] = i, cnt
data[i][cnt][0], data[i][cnt][1] = value[j], value[j + 1]
cnt += 1
data[0][0][0] = shark
fish_move(fish_pos, data)
def fish_move(fish, data):
for i in range(1, 17):
x, y = fish[i]
# 방향 빼서 그 방향으로 이동.
for j in range(9):
nx, ny = dx[data[x][y][1]][0], dx[data[x][y][1]][1]
if 0 <= nx < 4 and 0 <= ny < 4 and data[nx][ny][0] != shark:
data[x][y], data[nx][ny] = data[nx][ny], data[x][y]
print(data[x][y][0], data[nx][ny][0])
fish[data[x][y][0]], fish[data[nx][ny][0]] = fish[data[nx][ny][0]], fish[data[x][y][0]]
def shark_move(shark_x, shark_y, data, fish, cnt):
# 현재 좌표에서 이동 가능한것들 쭈우욱 뽑기.
# 지금 내가 풀려고 하는 방식은 상어가 움직이는 것과 물고기가 움직이는 함수 두개로 나눈다.
# 상어는 현재 방향으로 while문을 돌면서, 재귀를 도는 것이다.
x, y = shark_x, shark_y
fish_move()
data[x][y][1]
solved()
|
cs |
이 문제는 구현이 꼬이지 않게 하는 것이 중요한 문제이다.
풀이법을 생각해 내는 과정은 길지 않았지만, 구현이 조금 복잡했다.
이 문제를 풀면서 왜 삼성 기출을 풀라고 하는지 조금은 감이 왔다. 어제 카카오 인턴 코테를 봤는데, 느낌이 많이 비슷하다. 풀이법은 생각나지만, 구현하는 과정에서 머리가 복잡해진다.
이런 문제를 풀면서 연습하면 좋을 것 같다.
해석
처음 풀려고 했던 방식은
1. 물고기가 움직이는 함수
2. 상어가 움직이는 함수 ( 재귀로 구현)
1. 물고기가 움직이는 함수:
현재 물고기 번호에 해당하는 좌표를 저장하고 있는 list를 매개변수로 받는다.
물고기가 1번부터 16번까지 전부 자신의 방향대로 한칸씩 움직인다.
2. 상어가 움직이는 함수
상어가 자신의 방향으로 움직일 수 있는 좌표를 전부 재귀를 돌면서 실행한다.
하지만 이때 재귀호출 이전과 이후에 어떤 조치를 해줘야 하는지는 생각 못했다.
'개발 > 알고리즘' 카테고리의 다른 글
[ 백준 / Python ] 피보나치의 수 (0) | 2021.05.14 |
---|---|
[알고리즘] 시간 복잡도 Big-O (0) | 2021.05.11 |
[백준 / Python] 음악프로그램_2623 (0) | 2021.05.03 |
[백준 / Python] 게임 개발_1516 (0) | 2021.05.02 |
[백준 / Python] 줄 세우기_2252 (0) | 2021.04.29 |