본문 바로가기

Python ◡̈/차근차근 Python

[programmers] python 완전탐색 소수찾기

 

programmers.co.kr/learn/courses/30/lessons/42839?language=python3

 

코딩테스트 연습 - 소수 찾기

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

programmers.co.kr

 

 

<문제>

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

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

 

 

<constraint>

- numbers는 길이가 1 이상 7 이하인 문자열

- numbers는 0~9까지 숫자만으로 이루어짐

- "013"은 0과 1, 3이 적힌 종이 조각들 의미

 


 

<example>

 


 

< 풀이 방법 >

    - 함수: solution, isPrime

        - def solution(numbers):

            - 각 카드의 조합을 중복 제거하여 list에 추가

                - list에 모든 경우의 수 추가한 뒤 제거하는 방법도 ok

            - if isPrime == true:

                - ① 소수들만 묶어놓은 list에 추가 (numbersAll)

                - ② count 변수 + 1

            - numbersAll 중복제거 필요

                - set 함수 사용

            - return len(numbersAll)

        - def isPrime(n): n이 소수인지 판별하는 함수

            - n이 0 또는 1인 경우, return False

            -2부터 n-1까지 반복하며, n을 나누었을 때 나누어 떨어지면 return False

            - 모두 해당되지 않는다면, return True

 

 

** 모든 경우의 수 구하는 방법

- 우선 itertools의 permutations를 import

    - permutations( , i): 순열의 성질을 이용하여 길이가 i인 모든 경우의 수를 구해줌

- 길이가 1인 것부터 문자열 길이만큼 반복하여 모든 경우의 수 구하기

 


 

성공 코드 ① 리스트에 추가하여 return len(list) 

 

실패 코드 ② count 변수 + 1

 

    - line 7 이후 set 함수 통해 중복을 제거하고자 했지만, 결과는 동일하게 기댓값과 달라 실패


 

** 헷갈리는 개념 정리하기

    - set 집합

        - https://wikidocs.net/16044

    - map 함수

        : 리스트/튜플의 요소를 지정된 함수로 처리해주는 함수 (새 리스트 생성해줌)

        - list(map(function, list)) | tuple(map(function, tuple))

 


 

code review 통해 보다 더 간단하게 줄이는 과정 거쳐 코드 수정

 

ⓕ ⓘ ⓝ ⓐ ⓛ    ⓒ ⓞ ⓓ ⓔ