프로그래머스 LV1 크레인 뽑기 인형

프로그래머스 LV1 크레인 뽑기 인형

2021, Mar 30    

프로그래머스 lv1 크레인 뽑기 인형 더하기 파이썬

이중 for 문은 O($n^2$)이 되므로 될 수 있으면 사용하지 말 것


풀이

def solution(board, moves):
    cols = list(map(lambda x: list(filter(lambda y: y > 0, x)), zip(*board)))
    result, bucket = 0, [0]

    for m in moves:
        if len(cols[m - 1]) > 0:
            if (d := cols[m - 1].pop(0)) == (l := bucket.pop()):
                result += 2
            else:
                bucket.extend([l, d])

    return result

풀이2

def solution(board, moves):
    board_com = list(map(lambda x: list(filter(lambda y: y > 0, x)), zip(*board)))
    result, bucket = 0, [0]

    for move in moves:
        print("board_com:",board_com)
        print('move:',move)
        if len(board_com[move - 1]) > 0:
        
            if (boom := board_com[move - 1].pop(0)) == (l := bucket.pop()):
                print("boom number:",boom)
                print("boom bucket:", bucket)
                result += 2
            else:
                bucket.extend([l, boom])
                print("else bucket:", bucket)

    return result

:= 바다연산자 파이썬 3.8의 새로운 기능

바다연산자 변수에 값을 대입하는 새로운 문법

바다코끼리의 눈과 엄니를 닮아서 《바다코끼리 연산자(the walrus operator)》라고 친근하게 알려져 있다.

기존의 파이썬 3.7에서는 n이라는 변수를 한번 선언했어야 하나

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
n = len(a)
if n > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

바다연산자를 쓰면 n을 조건문 안에 선언하고 값을 대입하여 코드 한 줄을 아낄 수 있다.

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

함수 정리(filter, lambda, map, zip, list.append, extend)

  • filtter(조건 함수, 리스트) : 리스트에 들어있는 원소들을 함수에 적용시켜서 결과가 참인 값들로 새로운 리스트를 만들어 줌

  • lambda 인자 : 표현식 예시:(lambda x,y: x + y)(10, 20) ->>30

    • lambda 매개변수들: 식 예시: lambda x: x + 10 매개변수 x 하나를 받고, x에 10을 더해서 반환한다는 뜻
    • lambda 자체를 호출하면 매개변수가 나옴. 다른 변수에 할당하고 불러야 됨
  • map(함수, 리스트)

  • zip(*iterable)원소를 한개씩 뽑아서 튜플로 합침

  • list.append(x) 리스트 끝에 x 1개를 넣습니다.
    • list.extend(iterable) 리스트 끝에 iterable의 모든 항목을 넣는다.
    • list(filter(lambda x: x % 2, range(10)))
# filter 와 lambda 를 이용하여 홀수를 돌려주는 필터를 만들어봄.
list(filter(lambda x: x % 2, range(10)))
>>>[1, 3, 5, 7, 9]

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges