728x90
문제 설명
- 일정한 규칙에 따라 이동하는 주사위가 획득하는 점수를 계산하는 문제
- 주사위 방향을 전환하는 규칙, 점수를 계산하는 규칙을 꼼꼼하게 읽고 풀이하면 어렵지 않게 풀 수 있는 문제
고민한 부분
- 주사위의 상태를 나타내기 위한 방법을 고민했다. 다른 분들의 풀이를 보면 길이 6의 list로 만들어 index별로 의미를 부여해 문제를 해결했는데 나는 헷갈려서 각각의 위치에 해당하는 6개의 변수를 만들어 주사위를 modeling하는 것이 실수를 줄일 수 있는 방법이라고 생각했다. line 16부터 시작하는
roll
method에서 각 변수 이름을 typing하는 것이 귀찮지만 실수 없이 한번에 해결할 수 있는 것이 더 좋다고 생각한다.
- 계산하는 비용을 줄일 수 있는 방법을 고민했는데, 점수를 계산할 때 계산된 값은 그 과정에서 탐색된 table의 모든 element가 같은 값을 갖는다.
- 예를 들어 위의 table에서 주사위가 (1,1)에서 (2,1)로 이동했을 때 계산되는 점수는 그 과정에서 탐색되는 모든 영역과 같은 값을 갖는다. 이를 활용해 문제 풀이 과정 중 중복되어 탐색되는 낭비를 방지할 수 있다.
- line 127에
score_map
을 정의해 계산된 점수를 기록해 이후에 주사위가 어떤 위치에 방문했을 때 활용한다. - 점수 계산을 수행하는
cal_score
method에서 line 73에서score_map
을 참조해 이미 점수가 계산된 위치라면 탐색을 하기 전에 이를 참조해 점수를 반환하도록 풀이했다. - 이 정보를 활용하지 않고 풀이한 경우 780ms 시간에 소요된 반면 이를 활용해 중복 탐색을 줄인 경우 76ms이 소요된 것을 확인했다.
- line 127에
Lesson learned
- 주사위 굴리기 1 문제를 해결한 후 다른 분들의 풀이를 보니 많은 분들이 주사위 modeling을 list로 했던 것을 확인했다. 이번 문제를 할 때 같은 방식으로 풀어보려 했지만 index가 헷갈려 실수를 반복했다.
- 먼저 내가 익숙한 풀이로 풀이한 뒤 다른 사람들의 풀이 방식과 비교해 문제점이 없다면 그 방식을 유지하는 것도 괜찮을 것 같다고 생각을 했다. 그렇지만 혼자서 공부하는 입장에서 내 풀이가 문제가 있는지 알 수 있는 방법은 없는 것 같다.
- 질문을 할 수 없는 상황에서 최선의 방법은 다른 분들의 코드를 이해하고 다시 짜보며 분석해보는 것이 도움이 될 것 같다.
'알고리즘 공부 > 백준 문제풀이' 카테고리의 다른 글
[python 백준] 2630번 색종이 만들기 (0) | 2022.09.10 |
---|---|
[python 백준] 1463번 1로 만들기 (0) | 2022.09.05 |
[python 백준] 14890번 경사로 (2) | 2022.08.07 |
[python 백준] 15685번 드래곤 커브 (0) | 2022.08.07 |
[백준 python] 14501번 퇴사 (0) | 2022.08.05 |