문제: https://school.programmers.co.kr/learn/courses/30/lessons/42839
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
방법1 : 통과
1) new_nums = [int(("").join(p)) for p in per] 를 이용해서 문자열 > 숫자로 변경해서, 결합할 수 있음
2) cnt 쓰지말고 continue하면된다
def perm(arr,n):
result = []
if n > len(arr):
return result
if n == 1:
for i in arr:
result.append([i])
elif n > 1:
for i in range(len(arr)):
ans = [i for i in arr]
ans.remove(arr[i])
for p in perm(ans, n-1):
result.append([arr[i]]+p)
return result
def solution(numbers):
answer = []
nums = [n for n in numbers]
per = []
for i in range(1, len(numbers)+1):
per += list(perm(nums, i))
print(per)
new_nums = [int(("").join(p)) for p in per]
for n in new_nums:
if n < 2:
continue
check = True
for i in range(2,int(n**0.5) + 1):
if n % i == 0:
check = False
break
if check:
answer.append(n)
return len(set(answer))
방법2 테스트 2, 10 시간초과
def perm(arr,n):
result = []
if n > len(arr):
return result
if n == 1:
for i in arr:
result.append([i])
elif n > 1:
for i in range(len(arr)):
ans = [i for i in arr]
ans.remove(arr[i])
for p in perm(ans, n-1):
result.append([arr[i]]+p)
return result
def solution(numbers):
answer = 0
numbers = list(map(str, numbers))
result = []
for i in range(1, len(numbers) + 1):
tmp = perm(numbers,i)
result = result + list(set(map(tuple, tmp)))
tmp = []
for index, i in enumerate(list(map(list, result))):
tmp.append(int("".join(i)))
result = tmp
result = list(set(result))
for k in result:
cnt = 0
for j in range(1,k+1):
if k % j == 0:
cnt += 1
if cnt == 2:
answer += 1
cnt = 0
return answer
반응형
'공부 서랍장 > 알고리즘 공부' 카테고리의 다른 글
[프로그래머스] 피로도 python (2) | 2022.09.19 |
---|---|
[프로그래머스] 카펫 python (1) | 2022.09.19 |
[알고리즘 필수 기법] 조합, 순열 (0) | 2022.09.18 |
[프로그래머스] 모음사전 python (0) | 2022.09.18 |
[프로그래머스] H-Index python (0) | 2022.09.18 |