[Python] 프로그래머스 - 소수 찾기 (완전탐색)

yunyoung·2021년 1월 12일
0

알고리즘

목록 보기
6/41

문제 설명

📃 문제 링크

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

제한사항

  • numbers는 길이 1 이상 7 이하인 문자열입니다.
  • numbers는 0~9까지 숫자만으로 이루어져 있습니다.
  • 013은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.

입출력 예

numbersreturn
173
0112

문제 풀이

순열을 사용했다. numbers의 각각의 문자를 가지고 permutations으로 list를 만들었다.

첫 번째 입출력 예는 모두 다른 숫자들로 이루어져 있으므로 상관없지만, 두 번째 입출력 예시의 "011"처럼 같은 숫자가 있을 경우 permutations로 순열을 만들면 01, 01, 10, 11, 10, ... 처럼 중복된 수가 존재하게 된다.
따라서 set으로 중복을 제거하고, 소수인지를 판단해서 answers에 더해준다.

마지막으로 "11, 011"이 둘 다 소수로 판단되어 각각 int로 형변환된 값이 answers에 들어가므로 answers에는 11이 두 개 존재하게 된다. 따라서 answers도 역시 set으로 중복을 제거해주면 된다.

알게 된 것

처음에는 그냥 아래처럼 permutations만 써서 구현해보려 했었다.

print(list(permutations(numbers,i)))

출력해보면

[('1',), ('7',)]
[('1', '7'), ('7', '1')]

이렇게 출력된다. 이 문제에서 필요한 것은 1, 7, 17, 71이므로 join을 사용해서 해결할 수 있었다.

list(map(''.join, permutations(numbers, i)))

join함수는 문자열 String 합칠 때 사용하는 함수로, String 사이에 특정 문자열을 삽입해 나눠져 있던 String문자열을 새로운 문자열로 합쳐준다.

그래서 위와 같이 파라미터를 ""로 해서 공백 없이 하나의 문자열로 만드는 방법을 사용했다.

위 코드의 출력 결과

['1', '7']
['17', '71']

소스 코드

profile
🌈TIL과 개발 노트

0개의 댓글