[프로그래머스] 소수 찾기 (Level 2) / Python

2021. 1. 19. 09:59·Programmers
반응형

문제주소 :programmers.co.kr/learn/courses/30/lessons/42839

 

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

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

programmers.co.kr


<문제 설명>

더보기

문제 설명

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

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

제한사항

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

입출력 예

numbers                                                              return
17 3
011 2

입출력 예 설명

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

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

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

 

<풀이법>

▒ 한줄 개념: 소수 계산▒ 
  1. numbers는 문자열이므로 각 숫자를 떼어내줍니다.
    • "17" -> ["1", "7"]
  2. 분리된 숫자들을 permutations()를 이용해 순열 조합해줍니다.
    • ["1", "7", "2"] -> ("1"), ("7"), ("1","7"), ("7", "1")
  3. 해당 숫자들을 "".join을 이용해 각각 하나의 숫자로 만들어줍니다.
    • ("1"), ("7"), ("1","7"), ("7", "1") -> [1, 7, 17, 71]
  4. 각 숫자에 대하여 소수인지 판별합니다.
    • 17은 소수인가? 17의 제곱근까지 나눠보며 어떤 수에도 나누어 떨어지지 않으면 소수!
    • 17 -> [1, 2, 3,... 17^0.5]
    • 반복문 작성시 제곱근 +1 까지로 반복해야 통과가 됩니다.

 

<코드(Python)>

from itertools import permutations

def solution(numbers):
    answer = []                                   
    nums = [n for n in numbers]                   # numbers를 하나씩 자른 것
    per = []                                      
    for i in range(1, len(numbers)+1):            # numbers의 각 숫자들을 순열로 모든 경우 만들기
        per += list(permutations(nums, i))        # i개씩 순열조합
    new_nums = [int(("").join(p)) for p in per]   # 각 순열조합을 하나의 int형 숫자로 변환

    for n in new_nums:                            # 모든 int형 숫자에 대해 소수인지 판별
        if n < 2:                                 # 2보다 작은 1,0의 경우 소수 아님
            continue
        check = True            
        for i in range(2,int(n**0.5) + 1):        # n의 제곱근 보다 작은 숫자까지만 나눗셈
            if n % i == 0:                        # 하나라도 나눠떨어진다면 소수 아님!
                check = False
                break
        if check:
            answer.append(n)                      # 소수일경우 answer 배열에 추가

    return len(set(answer))                       # set을 통해 중복 제거 후 반환

 

 

더 많은 코드 보기(GitHub) : github.com/dwkim-97/CodingTest

 

 

반응형

'Programmers' 카테고리의 다른 글

[프로그래머스] 올바른 괄호 / Python  (0) 2021.01.19
[프로그래머스] 튜플 / Python  (0) 2021.01.19
[프로그래머스] 문자열 압축 / Python  (0) 2021.01.19
[프로그래머스] 괄호 변환 / Python  (0) 2021.01.18
[프로그래머스] 조이스틱 / Python  (0) 2021.01.18
'Programmers' 카테고리의 다른 글
  • [프로그래머스] 올바른 괄호 / Python
  • [프로그래머스] 튜플 / Python
  • [프로그래머스] 문자열 압축 / Python
  • [프로그래머스] 괄호 변환 / Python
개발하는 사막여우
개발하는 사막여우
개발개발 주저리주저리
    반응형
  • 개발하는 사막여우
    개발하는 사막여우
    개발하는 사막여우
  • 전체
    오늘
    어제
    • All (311)
      • Books (13)
        • 읽기 좋은 코드가 좋은 코드다 (13)
      • Study (6)
        • Blockchain (3)
        • Algorithm (3)
      • Baekjoon (36)
      • Programmers (166)
      • LeetCode (15)
      • Open Source (1)
        • Youtube Popout Player (1)
      • Language (32)
        • Python (9)
        • JS (8)
        • Java (5)
        • HTML (6)
        • CSS (4)
      • Library & Framework (15)
        • React.js (15)
      • IDE (2)
        • IntelliJ (2)
      • Airdrop (9)
      • Tistory (2)
      • etc.. (7)
        • Cozubi (6)
        • lol-chess (0)
  • 블로그 메뉴

    • Github
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    카카오 공채
    programmers
    2018 KAKAO BLIND RECRUITMENT
    읽기 좋은 코드가 좋은 코드다
    Python
    Java
    백준
    카카오 알고리즘 문제
    클린 코드
    클린 코드 작성법
    알고리즘문제풀이
    프로그래머스 위클리 챌린지
    파이썬
    코인줍줍
    코딩테스트연습
    Cozubi
    신규 코인 에어드랍
    코주비
    프로그래머스
    카카오 코딩테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
개발하는 사막여우
[프로그래머스] 소수 찾기 (Level 2) / Python
상단으로

티스토리툴바