안녕하세요. 위기의 코딩맨입니다.
앞으로 프로그래머스의 코딩 테스트 문제를 풀어보려고 합니다. 언어는 Python 기반으로 진행할 예정입니다.
오늘은 프로그래머스의 코딩 테스트 연습 Level 1 소수만들기를 진행해 보려합니다.
문제를 잘 이해하고, 입출력 예 설명을 잘 보고 코딩을 진행해야합니다.
일단 제가 진행한 소스를 보시겠습니다.
def solution():
answer = 0
for i in range(0, len(Array_)):
num_1 = Array_[i]
for j in range(i+1, len(Array_)):
num_2 = Array_[j]
for z in range(j+1, len(Array_)):
num_3 = Array_[z]
re_ = num_1 + num_2 + num_3
if check(re_):
answer +=1
return answer
def check(a):
sum = a
for i in range(2, total):
if sum % i == 0 :
return False
return True
제 코드는 들어오는 리스트를 토대로, for 문을 3번 사용하여 3개의 값을 설정하고,
그 값들의 합을 check()로 보내, 소수 인지 확인을 하여, 소수이면 True, 소수가 아니면 False을 리턴하여
True면 answer+=1을 실행하게 됩니다.
이 방식을 계속 반복하여, 모든 for문이 완료되면 answer를 완료 값으로 return하여 종료합니다.
결과는 테스트가 모두 성공!다음으로 다른 사람들의 코드를 확인해보았습니다.
from functools import reduce
from itertools import combinations
def Find_Sosu_S():
answer = 0
A = list(combinations(Array_, 3))
for i in A:
num_ = reduce(lambda x, y: x + y, i)
if check(num_): answer += 1
return answer
check부분은 소수를 확인하는 부분이라 제가 임의로 바꿔서 넣었습니다.!
여기서 중요한점은 A = list(combinations(Array_, 3)) 인데
3중 for문을 사용한것을 for문을 한번 사용할 수 있도록 줄인 부분입니다.
combinations로 3자리의 조합된 수를 리스트로 넣어줍니다.
Array_ = [1,2,3,4]
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
Array_를 넣고 돌리면 밑의 값이 결과로 나옵니다.
이 값들을 lambda의 reduce()함수를 사용하여 그 리스트들의 값을 모두 더하여 소수인지 확인하는 것입니다.
모든 소스들이 정답은 아니지만 효율이나, 가독성이 좋은 코드를 제작할 수 있도록 노력합시다..
'Python > Programmers' 카테고리의 다른 글
[We-Co] 2022 KAKAO BLIND RECRUITMENT 주차 요금 계산 - Python (5) | 2022.03.15 |
---|---|
[We-Co] 프로그래머스 레벨 1단계 결과 (0) | 2021.08.20 |
[We-Co] 숫자 문자열과 영단어- KAKAO 코딩테스트 (0) | 2021.08.06 |