
프로그래머스 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 자체를 호출하면 매개변수가 나옴. 다른 변수에 할당하고 불러야 됨
- 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