📃 문제 링크
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한사항
입출력 예
numbers | return |
---|---|
17 | 3 |
011 | 2 |
순열을 사용했다. 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']