구현 중 고민되었던 부분
첫번째
뱀의 이동 방향에 따라 왼쪽, 오른쪽 회전 방향이 달라지는데 그걸 어떻게 구현해야하나
나 같은 경우 딕셔너리를 사용해서 하나씩 다 정의해 주었다.
dic = {"상":{"L":"좌", "D":"우"}, "하":{"L":"우", "D":"좌"},
"좌":{"L":"하", "D":"상"},"우":{"L":"상", "D":"하"}}
두번째
뱀이 머리를 옮기고 꼬리를 이동하는 중에 중간에 몸통은 어떻게 옮겨야하나
이 부분에서 막혀서 문제를 풀지 못했다
고민 해결책
이코테 책을 보고 해결하였다.
첫번째
처음에 오른쪽을 보고 있다고 문제에서 주어졌다.
#시계 방향, 반시계방향으로 돌아가게 하기 위한 세팅(처음에 오른쪽을 보고 있으므로 동,남,서,북으로 초기화)
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
def turn(direction, c):
if c == "L":
direction = (direction-1)%4 #현재 진행 방향에서 반시계방향
else:
direction = (direction+1)%4 #현재 진행 방향에서 시계방향
return direction
def simulate():
...
if index < 1 and time == info[index][0]: #회전할 시간인 경우 회전
direction = turn(direction, info[index][1])
index += 1
...
오른쪽을 기준으로 시계 방향(D)으로 진행하면 동 -> 남 -> 서 -> 북으로 진행되므로 dx, dy의 인덱스가 1씩 감소하면 된다.
오른쪽을 기준으로 반시계 방향(L)으로 진행하면 북 -> 서 -> 남 -> 동 으로 진행되므로 dx, dy의 인덱스가 1씩 증가하면 된다.
시계 방향인 경우 c가 "D"인 경우이고, 반시계 방향인 경우 c가 "L"일 회전하면 된다.
두번째
뱀이 위치한 좌표를 리스트에 저장하고나서 사과가 없다면 lst.pop(0)을 해서 꼬리 부분을 제거하고 머리 부분을 저장해 주면 뱀의 몸통에 대한 좌표도 자연스럽게 저장할 수 있다.
뱀이 움직인 좌표에 대한 정보를 리스트에 저장할 생각을 못하고 map에서 직접 뱀을 옮길 생각 밖에 안해서 못 풀었던거 같다
새롭게 알게된 사실
`-1%4` 이렇게 음수 나머지 연산을 하게 되면 나머지가 3이 나온다.
`-1/4` 의 몫이 -1인데, -1이 되기 위해서는 나머지가 3이 되어야한다.
4 * (-1) + 3 = -1
'알고리즘 > 백준' 카테고리의 다른 글
[구현] 소수의 연속합 - 소수 판별 (에라토스테네스의 체) (0) | 2024.08.21 |
---|---|
[그리디] 단어 수학 (0) | 2024.08.09 |
설탕 배달 (파이썬) (0) | 2024.06.29 |
14888 연산자 끼워넣기 (파이썬 시간초과) (0) | 2024.05.23 |
[구현] 2167 (0) | 2024.04.26 |
구현 중 고민되었던 부분
첫번째
뱀의 이동 방향에 따라 왼쪽, 오른쪽 회전 방향이 달라지는데 그걸 어떻게 구현해야하나
나 같은 경우 딕셔너리를 사용해서 하나씩 다 정의해 주었다.
dic = {"상":{"L":"좌", "D":"우"}, "하":{"L":"우", "D":"좌"}, "좌":{"L":"하", "D":"상"},"우":{"L":"상", "D":"하"}}
두번째
뱀이 머리를 옮기고 꼬리를 이동하는 중에 중간에 몸통은 어떻게 옮겨야하나
이 부분에서 막혀서 문제를 풀지 못했다
고민 해결책
이코테 책을 보고 해결하였다.
첫번째
처음에 오른쪽을 보고 있다고 문제에서 주어졌다.
#시계 방향, 반시계방향으로 돌아가게 하기 위한 세팅(처음에 오른쪽을 보고 있으므로 동,남,서,북으로 초기화) dx = [0, 1, 0, -1] dy = [1, 0, -1, 0] def turn(direction, c): if c == "L": direction = (direction-1)%4 #현재 진행 방향에서 반시계방향 else: direction = (direction+1)%4 #현재 진행 방향에서 시계방향 return direction def simulate(): ... if index < 1 and time == info[index][0]: #회전할 시간인 경우 회전 direction = turn(direction, info[index][1]) index += 1 ...
오른쪽을 기준으로 시계 방향(D)으로 진행하면 동 -> 남 -> 서 -> 북으로 진행되므로 dx, dy의 인덱스가 1씩 감소하면 된다.
오른쪽을 기준으로 반시계 방향(L)으로 진행하면 북 -> 서 -> 남 -> 동 으로 진행되므로 dx, dy의 인덱스가 1씩 증가하면 된다.
시계 방향인 경우 c가 "D"인 경우이고, 반시계 방향인 경우 c가 "L"일 회전하면 된다.
두번째
뱀이 위치한 좌표를 리스트에 저장하고나서 사과가 없다면 lst.pop(0)을 해서 꼬리 부분을 제거하고 머리 부분을 저장해 주면 뱀의 몸통에 대한 좌표도 자연스럽게 저장할 수 있다.
뱀이 움직인 좌표에 대한 정보를 리스트에 저장할 생각을 못하고 map에서 직접 뱀을 옮길 생각 밖에 안해서 못 풀었던거 같다
새롭게 알게된 사실
-1%4
이렇게 음수 나머지 연산을 하게 되면 나머지가 3이 나온다.
-1/4
의 몫이 -1인데, -1이 되기 위해서는 나머지가 3이 되어야한다.
4 * (-1) + 3 = -1
'알고리즘 > 백준' 카테고리의 다른 글
[구현] 소수의 연속합 - 소수 판별 (에라토스테네스의 체) (0) | 2024.08.21 |
---|---|
[그리디] 단어 수학 (0) | 2024.08.09 |
설탕 배달 (파이썬) (0) | 2024.06.29 |
14888 연산자 끼워넣기 (파이썬 시간초과) (0) | 2024.05.23 |
[구현] 2167 (0) | 2024.04.26 |