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

Jonie Kwon·2022년 5월 7일
0
post-custom-banner

2주차 후기

💪🏻 프로그래머스 코드리뷰 스터디가 2주차가 되었다.👏🏻👏🏻👏🏻
리뷰를 통해 알려주신 내용들 덕분에 자료구조를 선택할 수 있는 폭이 넓어진 것 같다.
그리고 코드도 상당히 깔끔해진 느낌을 받았다. 물론 단순히 ㅎㅎ 오퍼레이터 사이를 띄었다 안띄었다 하던걸 신경써서 일지도 모르겠지만 아무튼! if를 정리하는건 아직 어렵다.

이번 주 주제는 Stack과 Hash 였는데 "사전순 부분문자열" 문제가 너무 어려웠다. 이 문제가 너무 어려워서 모의고사가 걱정됐는데 오히려 모의고사는 너무 쉬웠다. 덕분에 Stack 문제에 취약하다는 것을 깨달았다. 백준에서 비슷한 유형의 문제를 많이 연습해봐야겠다.😂

스터디에서 풀었던 문제들은 잊어버릴 때 쯤 복습하면서 정리하려고 한다. :)
처음 풀었던 코드와 다시 풀었을 때 코드를 비교해봐야겠다 ㅎㅎ

2주차 리뷰내용

  • return int(stack == []) 요게 너무 인상깊어서 모의고사 풀 때 써먹었다.
  • set과 딕셔너리의 in 연산자 시간복잡도 평균 O(1) 최악의 경우 O(n)
    - set은 항상 중복 제거에만 활용했는데 왜 순회에 사용할 생각을 못 했는지..!

리뷰 전 후 코드 비교!

빙고 (수정 전)

def check_bingo(board, nums):
    length = len(board)
    bingo = 0
    for y in range(length):
        count = 0
        for x in range(length):
            try:
                if nums[board[y][x]] == 1:
                    count += 1
            except:
                pass
        if count == length:
            bingo += 1
    return bingo

def check_diagonal_bingo(board, nums):
    length = len(board)
    count = 0
    bingo = 0
    for y in range(length):
        for x in range(length):
            try:
                if y == x and nums[board[y][x]] == 1:
                	count += 1
            except:
                pass
        if count == length:
            bingo += 1
    return bingo

def solution(board, nums):
    nums = {k:1 for k in nums}
    # 가로 체크
    bingo = check_bingo(board, nums)
    # 세로 체크
    board = list(map(list, zip(*board)))
    bingo += check_bingo(board, nums)
    # 대각선
    bingo += check_diagonal_bingo(board, nums)
    bingo += check_diagonal_bingo(board[::-1], nums)

    return bingo

빙고 (수정 후)

def check_bingo(board, nums):
    length = len(board)
    bingo = 0
    for y in range(length):
        count = 0
        for x in range(length):
            if board[y][x] in nums:
                count += 1
        if count == length:
            bingo += 1
    return bingo

def check_diagonal_bingo(board, nums):
    length = len(board)
    count = 0
    bingo = 0
    for y in range(length):
        if board[y][y] in nums:
            count += 1
        if count == length:
            bingo += 1
    return bingo

def solution(board, nums):
    nums = set(nums)
    # 가로 체크
    bingo = check_bingo(board, nums)
    # 세로 체크
    board = list(map(list, zip(*board)))
    bingo += check_bingo(board, nums)
    # 대각선
    bingo += check_diagonal_bingo(board, nums)
    bingo += check_diagonal_bingo(board[::-1], nums)

    return bingo

딕셔너리를 사용해서 keyError 날까봐 try ~ except 사용했던 부분을 set으로 바꿔서 너무 간결하게 바뀌었다😆 이번 주 제일 맘에 드는 코드 ㅎㅎ

profile
메모하는 습관
post-custom-banner

0개의 댓글