[프로그래머스] 소수 만들기 (python)

노다현·2021년 1월 1일
1

알고리즘

목록 보기
16/22
post-thumbnail

문제

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

제한 사항

  • nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.

  • nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.

Solution

itertools.combinations 를 이용해 배열에서 3개의 원소만을 꺼낸 그룹(?)을 만든다.

모든 그룹에 대해 소수인지 판별하는 반복문을 써준다.

**
이 문제에서 for-else 문을 처음으로 알게되었다.

(3개의 원소만을 꺼낸 그룹을 조합 그룹이라고 할 때,)

조합 그룹에 있는 모든 원소의 합에 대해 2부터 (자기자신-1) 까지 나누었을 때, 나누어 지지 않으면 소수이다. 이를 판별하기 위해 이중 for문을 이용했는데, 나는 flag 변수를 이용해 한번이라도 나누어떨어진 적이 있으면 flag를 False로 변경해주어 반복문을 탈출했을 때, flag가 여전히 True이면 나누어 떨어진 적이 없다는 뜻이므로 cnt 값을 1 증가시켜 주었다.

하지만 for-else 구문을 사용하면, 해당 for문 내에서 break 된적이 없다면 else 구문을 실행시켜준다.

따라서 별도의 flag 변수를 사용할 필요가 없게된다.

Python Code

[ for-else 사용 전 ]

[ for-else 사용 ]

profile
DAilyHYUN.log

0개의 댓글