[코드리뷰 스터디] 3주차

Jonie Kwon·2022년 5월 13일
0

3주차 세션 후기

벌써 프로그래머스 코드리뷰 스터디 3주차 세션을 마쳤다! 👏🏻👏🏻👏🏻 지난 주 문제 난이도가 쉬운 편이어서 라이브 코딩이 아주 스무스하게 진행되었다. 틀렸습니다와 매니저님의 함박웃음😁 이번 회차 세션에서 제일 좋았던 내용은 unpacking(*)에 대한 내용이였다. 자물쇠와 열쇠 문제에서 열쇠를 90도 회전하는 함수를 따로 만들었었는데, zip, unpacking 그리고 reverse 함수를 조합해서 한 줄로 90도 회전된 리스트를 만드는 방법을 알게되었다.🤩

3주차 주제 : Seaching

그리디, DFS/BFS, 백트래킹, 구현 문제가 골고루 출제되었다. 모의고사에 나온 가로등 문제는 이분 탐색으로 풀어야 한다는 건 알겠는데, 구체적으로 어찌해야할 지 잘 모르겠어서 결국 풀이를 제출하지 못했다.ㅠ 문제는 대강 기억하고 있으니 백준에서 이분 탐색 문제 몇 개 더 풀어보고 다시 풀어봐야겠다.
4레벨 N-Queen 문제는 아직 못 풀고 있다.😭 백트래킹이라는게 가지치기랑 depth를 이용하는거라는데.. 이것도 백준에서 쉬운 문제부터 차근차근 연습해봐야겠다.
하노이의 탑 같은 경우는 알고리즘 공부 처음할 때 유명한 알고리즘이라고 소개되어있는걸 본 이후로 처음인데, 막상 혼자 구현하려니 도저히 떠오르지가 않아서 곤란했다. 역시 직접 고민해서 구현해보지 않으면 기억에 남지 않는다.

3주차 리뷰내용

  • product()에는 list가 아닌 range만 넣어도 동작한다.
  • 함수 외부에 존재하는 변수를 사용하면 함수의 참조 투명성이 떨어지기 때문에 안쓰는 것이 좋다.
  • (N-Queen) 대각선 조건을 판별할 때 queen[row] = col과 같이 1차원으로 판별할 수 있다.

리뷰 후 코드

버스여행.py

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이라는 집합을 사용해서 방문 체크를 했었다. 불필요한 부분을 제거하니 좀 더 간단한 코드가 되었다.
백트래킹이랑 재귀 문제가 너무 어렵다 😥

profile
메모하는 습관

0개의 댓글