귀여운 아바타가 새로 생겨났다
2주차가 되어 새로운 유형의 문제를 풀게 되었다. 풀이 전략부터 잘못된 방향으로 가서, 런타임 에러를 해결하는 데에 그치고 대부분의 문제에서 FAIL을 맞닥뜨렸다. 결국 24시간 내에 풀지 못하고 해설을 확인했다.
해설에서 힌트를 얻고, 라이브러리 사용법을 알게 되어서 내 방식대로 살짝 응용해서 풀어서 아쉬움.
모든 경우의 수를 탐색해서 리스트업을 해야하는 문제들이었는데, 길이가 길어지다보니 이게 맞는지 의심이 들고, 자동화를 하는 방식이 있을텐데 내가 모르는 게 아닐까 의구심이 들었다...
다들 어떻게 생각하는 걸까
이중 for문에서 기존에 할당된 리스트의 위치값을 지정하여 수정하다보면 모든 i의 리스트가 똑같아 지는 경우가 있다. 왜 그런걸까...?
tmp_li = [[0]*n]*n # 이런 식으로 리스트를 만드는 경우, 모든 i의 j 위치에 해당 값이 들어간다.
for i in range(n):
for j in range(n):
tmp_li[i][j] = i+j+1
tmp_li2 = [[0,0,0], [0,0,0], [0,0,0]] # 리스트를 직접 만드는 경우, 문제는 일어나지 않는다.
굳이 리스트를 생성해서 위치에 값을 넣을 필요없이, 빈 리스트에 append하면 되는 걸 깨달아서 그렇게 문제를 풀었지만, 여전히 의문은 해결되지 않는다...
Day6 : 문자열 나누기
- 리스트 내에 n만큼 뽑아내는 경우의 수를 구할 때는
from itertools import combinations
- set에 요소를 삽입할 때는 add
- for문을 돌리는 중에 더 높은 값으로 업데이트할 때는
answer = max(answer(기존값), temp(새로운 값))
Day7 : 구름 찾기 깃발
- "i, j가 0일 때, n일 때" 라는 조건문을 넣기보다, 그냥 상하좌우로 0인 패딩을 넣고 range(1, n+1) 안에서 for문을 돌리는 게 더 간편하다. 물론 문제 조건에 따라 다를 수 있다.
- 조건문 두 가지를 동시에 쓰고 싶을 때, &를 써서 한 줄로 쓴 것보다 다음 탭으로 내려서 if를 한 번 더 쓰는게 조금 더 실행 속도가 빨랐다. (예외는 있었으나, 어떤 케이스인지 몰라서 궁금하다.)