코딩/프로그래머스
[프로그래머스/파이썬] Lv1. 기사단원의 무기
kerp
2023. 1. 29. 23:06
> 문제
> 코드
def solution(number, limit, power):
n_dic={}
for n in range(1,number+1):
#공약수 구하기
div1 = []
for i in list(range(1,int(n**(1/2)+1))):
if n%i ==0: div1.append(i)
div2 = [n//di for di in div1]
div1.extend(div2)
#####
len_div = len(set(div1))
len_div = len_div if len_div<=limit else power
n_dic[n]= len_div
answer = sum(n_dic.values())
#####
return answer
이번 것도 수월하게 풀었다.
다만 ##### 사이 네 줄을 한 줄로 줄여버릴 수 있었는데 그걸 못해서 원통하다...
다른사람 풀이를 보니 function을 하나 더 만들어서 해결했더라고. 공약수를 구하는 두번째 for문을 function으로 만들고, 뒷부분을 한 줄로 줄이면
def solution(number, limit, power):
#공약수구하기
def cf(n):
div = []
for i in list(range(1,int(n**(1/2)+1))):
if n%i ==0:
div.append(i)
div.append(n//i)
return (len(set(div)))
#문제답구하기
return sum([len_n if (len_n:=cf(n)) <=limit else power for n in range(1,number+1)])
이런식으로! 깔끔하게! 적을 수 있다.
+ := 쓸 때는 제일 먼저 변수가 선언되는 곳에다가 쓰는 걸 잊지말자, , ,
(맨 처음 나온 len_n에 생각없이 붙였다가 에러떴다)
그리고 :=이친구 처음에는 활용 잘 못했는데 이렇게 쓰니까 되게 되게되게 연산을 편하게 해주네!