프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
소수를 만들기 위한 조합을 만들고 소수의 수를 count해 출력하는 문제이다.
초기에 코드를 짜다 자체적으로 7자리의 수의 모든 조합을 만드는 것은 힘들다 생각해 itertools의 permutauions를 사용하였다.
from itertools import permutations
def solution(numbers):
L = list(numbers)
per = []
answer=0
for i in range(1,len(L)+1):
per += list(map(''.join,permutations(L,i)))
per = list(map(int, per))
per = list(set(per))
per.sort()
#print(per)
for i in per:
check = True
if (i == 1) or (i == 0):
continue
elif i == 2:
answer += 1
else:
for j in range(2, i):
if ((i / j) == (i//j)):
print(i, j, i/j, i//j)
check = False
break
else:
check = True
if check == True:
answer+=1
return answer
print(solution('130'))
if ((i / j) == (i//j)):의 경우 비효율적이라 생각이되어 if i%j ==0: 으로 수정하였다.
테스트케이스는 성공했지만 정답제출시 통과하지 못해 다시 오류가 나는 부분을 찾아다녔다.
오류가 난 부분은 2를 예외처리할 때 answer += 1이라 해주었는데 check값은 True기 때문에 마지막 if 문에서 결국 +1이 더 되었다.
이를 해결하기 위해 다음과 같이 수정하였다.
from itertools import permutations
def solution(numbers):
L = list(numbers)
per = []
answer=0
for i in range(1,len(L)+1):
per += list(map(''.join,permutations(L,i))) #(모든 경우의 조합찾기)
per = list(map(int, per)) # int형 자료로 변환
per = list(set(per)) # 중복제거
per.sort() #정렬
print(per)
for i in per:
check = True
if (i == 1) or (i == 0):
continue
elif i == 2:
# answer += 1 #문제가 된 부분
check = True
else:
for j in range(2, i):
if (i % j == 0): #소수인지 아닌지 확인
check = False
break #소수라면 멈추고 다음 for문 진행
else:
check = True
if check == True: #소수라면 answer에 +1
answer+=1
return answer
이제 불 필요한 부분을 없애고 최적화를 해보겠다.
from itertools import permutations
def prime_check(i): #소수 판별을 함수화 / return하여 bool 값을 저장
if (i == 1) or (i == 0):
return False
elif i == 2:
return True
else:
for j in range(2, i):
if (i % j == 0):
return False
return True
def solution(numbers):
L = list(numbers)
per = []
answer=0
for i in range(1,len(L)+1):
per += list(map(''.join,permutations(L,i)))
per = sorted(set(map(int, per))) # int형 변형, 중복제거, 정렬을 한줄로 처리(계산 시간이 소폭 줄어듬)
for i in per:
if prime_check(i) == True:
answer+=1
return answer
다음과 같이 마무리하였다.
'<코딩테스트> > [프로그래머스]' 카테고리의 다른 글
[프로그래머스] > 코딩테스트 연습2023 > KAKAO BLIND RECRUITMENT > 이모티콘 할인행사 (3) | 2024.10.20 |
---|---|
[프로그래머스] > LV.2 > 타겟넘버 (0) | 2024.10.20 |
[프로그래머스] LV2 > 연습문제 > 뒤에 있는 큰 수 찾기 (0) | 2024.09.23 |
[프로그래머스] LV1 > 완전탐색 > 모의고사 (1) | 2024.09.09 |
[프로그래머스] LV1 > 완전탐색 > 최소직사각형 (0) | 2024.09.08 |