이번 주는 2차원 리스트를 활용해서 탐색하고, 값을 바꾸는 등의 문제가 많았다.
2차원에서 위치를 찾는 것에는 큰 어려움이 없었지만, 리스트의 값을 곱하기(*
)를 사용해서 만드는 경우 (아마도) 주소값의 문제로 이후 과정에 문제가 일어나는 것을 확인할 수 있었다.
10일차에 와서야 0으로 이루어진 2차원 리스트를 만들 때는 for문으로 만드는 것을 검색해서 알게 됐다.
내가 놓친 케이스를 스스로 떠올리기가 쉽지 않다. ㅠ
연습할 때만이라도 다양한 테스트 케이스를 주어줬으면 좋겠다...
Day8 : 통증
두 줄이면 되는 문제여서 허무했다.
지난 주 문제에서도, 이번 문제에서도 나눗셈의 몫과 나머지의 역할을 잘 이해하고 활용하는 것이 중요할 것 같다.
Day9 : 폭탄 구현하기 (2)
2차원 리스트 탐색형 문제는 개인적으로 테두리에 0을 집어넣어서 푸는 것이 마음편하다(?).
ground = [[0]*(n+2)] for _ in range(n): ground.append([0]+list(str(input()).split())+[0]) ground.append([0]*(n+2))
위와 같이 값을 받을 때부터 0을 집어넣었다. 리스트에 +를 활용하는 게 편하더라.
Day10 : GameJam
너무 오래 걸려서 힘들었다...ㅠㅠ
board 하나만 가지고 해보려다가 값을 바꾸면서 런타임 에러가 걸려서 빈 board를 하나 더 만들었다. 이건 day9에서도 그렇게 했다.
빈 board를 만드는 코드는 아래와 같이 했다. 리스트를 곱하기보다, (학습 일기에서도 언급했듯) for문을 쓰는 게 안전하다.board2 = [[0 for col in range(n+2)] for row in range(n+2)]
입력값의 범위 조건도 중요하다.
테스트 케이스에서 한 자리 수 케이스만 제시해서 그거에 맞춰서 했더니 Fail이 떠서,
Q&A에서 누군가 올려준 두 자리수 케이스를 보고서야 그 부분을 놓쳤다는 것을 알게 됐다.
그리고 이번 문제는 재귀함수로 풀었는데, 그러다보니 같은 블럭 안에 있는 코드여도 코드의 순서가 중요했고,
결국 포기하고 빈 board를 만들어 사용했지만, 만약 같은 board에서 값을 바꾸며 하려면 특히나 더 코드 라인의 순서가 중요할 것 같다.
board를 하나 더 만들면 메모리를 더 쓰게 되는 것 같아서 불리할 것 같은데, 이번 문제에서 메모리를 초과하거나 그러지는 않았다.