[Python / 알고리즘] 완전탐색 : 소수찾기 (프로그래머스)

2021. 6. 26. 15:31·Programming/Algorithm

문제 설명

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

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

제한사항

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

입출력 예

numbersreturn

"17" 3
"011" 2

입출력 예 설명

예제 #1
[1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.

예제 #2
[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.

  • 11과 011은 같은 숫자로 취급합니다.

 

해결방법

numbers를 한 글자씩 쪼갠 후 조합할 수 있는 모든 경우의 조합이 필요하다.

중복이 필요없고 쪼개진 숫자의 숫자가 유의미하므로 순열을 사용할 수 있다.

모든 경우의 순열을 만든 후 소수인지 아닌지 검사한다.

소수 검사는 모든 숫자를 나누고 검사하는 무식한 방법을 사용했다.

 

코드

from itertools import permutations


def solution(numbers):
    answer = []
    #string을 한 글자식 list로 담으려면 list(string)
    numbers= list(numbers)

    #순열을 사용한다.
    for i in range(len(numbers)):
        arr = list(permutations(numbers, i+1)) #순열로 변환 (튜플)
        arr = list(map(lambda x: int(''.join(list(x))) ,arr))

        for number in arr:
            isAnswer = True
            if number >1 and number not in answer:
                for i in range(2, number):
                    
                    if number % i == 0:
                        isAnswer = False
                        break
                if isAnswer == True:
                    answer.append(number)


    return len(list(set(answer)))

 

함수들

 

#순열/조합 함수들은 모두 튜플이 반환 값이다.

#일반순열
permutations(iterable, n)

#중복순열
product(iterable, repeat=num)

#조합
combinations(iterable, n) 

#중복조합
combinations_with_replacement(iterable객체, n)


#중복이 없는 list
set()

#map 함수
#list의 모든 요소에 함수를 적용하고 iterable로 반환한다
map(lambda x : 적용함수, iterable)
저작자표시 비영리 변경금지 (새창열림)

'Programming > Algorithm' 카테고리의 다른 글

[Python/알고리즘] BFS : 타겟 넘버 (프로그래머스)  (0) 2021.07.18
[Python/알고리즘] BFS : 단어변환 (프로그래머스)  (2) 2021.07.18
[Python/알고리즘] 힙 : 디스크 컨트롤러 (프로그래머스)  (0) 2021.06.03
[Python/알고리즘] 힙 : 더 맵게 (프로그래머스)  (2) 2021.05.03
[JS/알고리즘] 스택/큐 : 프린터 (프로그래머스)  (0) 2021.02.14
'Programming/Algorithm' 카테고리의 다른 글
  • [Python/알고리즘] BFS : 타겟 넘버 (프로그래머스)
  • [Python/알고리즘] BFS : 단어변환 (프로그래머스)
  • [Python/알고리즘] 힙 : 디스크 컨트롤러 (프로그래머스)
  • [Python/알고리즘] 힙 : 더 맵게 (프로그래머스)
박유상의 개발블로그
박유상의 개발블로그
개발블로그
  • 박유상의 개발블로그
    박유상의 개발블로그
    박유상의 개발블로그
  • 전체
    오늘
    어제
    • 전체 (134)
      • Who am I (10)
        • Portfolio (4)
        • Reminiscence (5)
        • Oversea (1)
        • SiliconValley (0)
      • React (36)
        • React Basic (15)
        • React Tech (5)
        • JavaScript (7)
        • TypeScript (3)
        • CSS&HTML (3)
        • Firebase (3)
      • NodeJS (1)
        • NodeJS Basic (1)
      • Flutter (55)
        • Flutter Widget Design (5)
        • Flutter Widget Basic (8)
        • Flutter Tech (18)
        • Flutter Issue (7)
        • Flutter Web (6)
        • About Flutter (2)
        • Firebase (1)
        • Dev Env (1)
        • Dart (7)
      • Programming (31)
        • Web (1)
        • General (0)
        • Algorithm (25)
        • Python (1)
        • VS Code (2)
      • Django (0)
  • 블로그 메뉴

    • Who I AM
    • React
    • NodeJS
    • Flutter
    • Programming
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    웹
    DART
    리액트
    HTML
    react
    useTranslation
    Lingory
    탐욕법
    링고리
    map
    CSS
    useRef
    useState
    JSON
    TypeScript
    Firebase
    알고리즘
    JavaScript
    자바스크립트
    DP
    파이썬
    프로그래머스
    github
    Flutter
    포트폴리오
    플러터
    flutter web
    플러터 웹
    Redux
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
박유상의 개발블로그
[Python / 알고리즘] 완전탐색 : 소수찾기 (프로그래머스)
상단으로

티스토리툴바