벌써 프로그래머스 코드리뷰 스터디 3주차 세션을 마쳤다! 👏🏻👏🏻👏🏻 지난 주 문제 난이도가 쉬운 편이어서 라이브 코딩이 아주 스무스하게 진행되었다. 틀렸습니다와 매니저님의 함박웃음😁 이번 회차 세션에서 제일 좋았던 내용은 unpacking(*
)에 대한 내용이였다. 자물쇠와 열쇠 문제에서 열쇠를 90도 회전하는 함수를 따로 만들었었는데, zip, unpacking 그리고 reverse
함수를 조합해서 한 줄로 90도 회전된 리스트를 만드는 방법을 알게되었다.🤩
그리디, DFS/BFS, 백트래킹, 구현 문제가 골고루 출제되었다. 모의고사에 나온 가로등 문제는 이분 탐색으로 풀어야 한다는 건 알겠는데, 구체적으로 어찌해야할 지 잘 모르겠어서 결국 풀이를 제출하지 못했다.ㅠ 문제는 대강 기억하고 있으니 백준에서 이분 탐색 문제 몇 개 더 풀어보고 다시 풀어봐야겠다.
4레벨 N-Queen 문제는 아직 못 풀고 있다.😭 백트래킹이라는게 가지치기랑 depth를 이용하는거라는데.. 이것도 백준에서 쉬운 문제부터 차근차근 연습해봐야겠다.
하노이의 탑 같은 경우는 알고리즘 공부 처음할 때 유명한 알고리즘이라고 소개되어있는걸 본 이후로 처음인데, 막상 혼자 구현하려니 도저히 떠오르지가 않아서 곤란했다. 역시 직접 고민해서 구현해보지 않으면 기억에 남지 않는다.
product()
에는 list
가 아닌 range
만 넣어도 동작한다.queen[row] = col
과 같이 1차원으로 판별할 수 있다.def solution(n,signs):
bus = [[] * n for _ in range(n)]
for i in range(n):
for j in range(n):
if signs[i][j] == 1:
bus[i].append(j)
routes = [[0] * n for _ in range(n)]
for i, b in enumerate(bus):
# stack : i 번째 정류장에서 갈 수 있는 정류장
stack = b[:]
while stack:
x = stack.pop()
if routes[i][x] != 1:
routes[i][x] = 1
stack.extend(bus[x])
return routes
😆 리뷰 전에는 route
를 사용할 생각을 못하고 visit
이라는 집합을 사용해서 방문 체크를 했었다. 불필요한 부분을 제거하니 좀 더 간단한 코드가 되었다.
백트래킹이랑 재귀 문제가 너무 어렵다 😥