일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- string
- 탐욕법
- 알고리즘
- DFS
- graph
- Dynamic Programming
- 큐
- Greedy
- 코딩테스트
- 힙
- 백준
- Brute Force
- sort
- Queue
- 그래프
- Code Refactoring
- 카카오 기출
- BFS
- heap
- binary search
- 정렬
- programmers
- Algorithm
- django
- 동적계획법
- DVWA
- 프로그래머스
- 문자열
- DP
- 완전탐색
Archives
- Today
- Total
생각과 고민이 담긴 코드
프로그래머스 - 소수 찾기 (완전 탐색) / Level 2 본문
문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한 사항
- numbers는 길이 1 이상 7 이하인 문자열입니다.
- numbers는 0~9까지 숫자만으로 이루어져 있습니다.
- "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
입출력 예시
numbers | return |
"011" | 2 |
"17" | 3 |
입출력 예 설명
예제 #1
[1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.
예제 #2
[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.
- 11과 011은 같은 숫자로 취급합니다.
풀이
from itertools import permutations
def solution(numbers):
answer = 0
raw_data = []
for i in range(len(numbers)):
obj = permutations(numbers, i + 1) # 순열 생성.
for j in obj:
raw_data.append(int(''.join(j))) # 각각의 순서쌍을 이어붙혀서 숫자로 만들어서 raw_data에 저장.
data = list(set(raw_data)) # 중복된 숫자 제거.
for i in data:
flag = False
if i == 0 or i == 1: # 0,1은 제외
continue
if i == 2: # 2는 소수로 체크하고 다음 요소로 넘어감.
answer += 1
continue
for j in range(2, i): # 소수인지 체크.
if i % j == 0:
flag = True
break
if not flag:
answer += 1
return answer
조금 헤맸던 문제이다.
"같은 것을 포함한 순열을 찾는 것"과 "소수인지 판별하는 것" 이렇게 2가지를 해결해야 하는 문제였다.
itertools의 permutations 함수를 활용하여 순열을 구할 수 있는데해당 라이브러리에서는 순열, 중복순열, 조합, 중복 조합에 대한 함수는 제공하지만같은 것을 포함한 순열을 구하는 함수는 제공하지 않는다.그러나 이번 문제에서는 순열을 일단 다 구하고 set구조로 변환시킴으로써 중복된 부분들을 없앨 수 있었다.
이 문제가 완전 탐색에 포함된 이유는?
종이조각으로 만들 수 있는 모든 숫자 조합에 대하여 소수인지 체크해줘야 했기 때문이다.
일부분만 탐색해서는 전체 범위에 소수가 몇 개인지 파악할 수 없다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 체육복 (Greedy) / Level 1 (0) | 2021.08.27 |
---|---|
프로그래머스 - 카펫 (완전 탐색) / Level 2 (0) | 2021.08.26 |
프로그래머스 - 모의고사 (완전 탐색) / Level 1 (0) | 2021.08.24 |
프로그래머스 - H-Index (정렬) / Level 2 (0) | 2021.08.23 |
프로그래머스 - 가장 큰수(정렬) / Level 2 (0) | 2021.08.23 |