Programmers / 소수 찾기 / Python 파이썬

2022. 5. 13. 15:56·coding test - python/Programmers
728x90
반응형

 

*문제 출처는 프로그래머스에 있습니다.

문제 제목: 소수 찾기 (2단계)

문제 사이트: https://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은 같은 숫자로 취급합니다.

나의 풀이

from itertools import permutations # 순열을 사용하기 위해 모듈 임포트

# 소수 판별 함수
def isPrime(x):
    if x == 1 or x == 0:
        return False
    for i in range(2,x//2+1):
        if x % i == 0: # 약수가 있는 경우 소수가 아님
            return False
    else:
        return True
        
# 숫자 카드 조합하기
def solution(numbers):
    arr = []
    com_arr = []
    cnt = 0
    for i in numbers: #입력받은 숫자카드를 하나씩 원소로 저장한다.
        arr.append(i)
    for n in range(len(arr)):
        for i in permutations(arr,n+1): # 순열 뽑기
            com_arr.append(int("".join(i))) # 투플 값을 합쳐서 정수형으로 반환
    com_arr = set(com_arr) # 같은 숫자 중복 제거 
    for i in com_arr:
        if isPrime(int(i)) == True:
            cnt += 1
    return cnt

숫자 카드가 1개,2개 ... 등 N의 자리 숫자인 경우도 생각해서 입력받은 문자열의 길이만큼

for문을 넣어주었음

 

그 다음 permutations 함수를 이용해서 순열을 뽑아주었다.

itertools 라이브러리는 해당 게시글을 참조하길 바랍니다.

 

모범답안

비트연산자, join함수, itertools, 에라토스테네스의 체를 적절하게 이용한 풀이이다.

가능한 수를 a에 저장하고 에라토스테네스 체를 사용해서 a에서 제거하였다.

from itertools import permutations
def solution(n):
    a = set()
    for i in range(len(n)):
    	# <<, >>, |=, &= 는 비트 연산자이다. 
        a |= set(map(int, map("".join, permutations(list(n), i + 1))))
        
    a -= set(range(0, 2)) #0과 1은 소수가 아니므로 a에서 제외한다.
    # 에라토스테네스의 체
    for i in range(2, int(max(a) ** 0.5) + 1): 
        a -= set(range(i * 2, max(a) + 1, i))
    return len(a)

# 비트 연산자

& (Binary AND) : bit 단위로 and연산을 한다.
| (Binary OR) : bit 단위로 or연산을 한다.
^ (Binary XOR) : bit 단위로 xor연산을 한다.
~ (Binary NOT) : bit 단위로 not연산을 한다.(1의 보수)
<< (Binary left Shift) : bit 단위로 왼쪽으로 비트단위 밀기 연산을 한다.
>> (Binary right Shift) : bit 단위로 오른쪽으로 비트단위 밀기 연산을 한다.


※ 알아야 할 것

- 투플 값도 join() 함수를 이용하여 투플값을 문자열(혹은 정수형)로 나타낼 수 있다.

- 수들은 약수가 대칭적으로 나오기 때문에 n의 약수는 sqrt(n)까지만 찾는다.

 

728x90
반응형

'coding test - python > Programmers' 카테고리의 다른 글

Programmers / 주식 가격 / Python 파이썬  (0) 2022.05.19
Programmers / n^2 배열 자르기 / Python 파이썬  (0) 2022.05.18
Programmers / 가장 큰 수 / Python 파이썬  (0) 2022.05.13
Programmers / 숫자의 표현 / Python 파이썬  (0) 2022.05.11
Programmers / 전화번호 목록 / Python 파이썬  (0) 2022.05.11
'coding test - python/Programmers' 카테고리의 다른 글
  • Programmers / 주식 가격 / Python 파이썬
  • Programmers / n^2 배열 자르기 / Python 파이썬
  • Programmers / 가장 큰 수 / Python 파이썬
  • Programmers / 숫자의 표현 / Python 파이썬
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (614)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (301)
        • Programmers (166)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (5)
        • Programmers (4)
        • 백준 (1)
        • 기본기문제 (0)
      • 공부정리 (5)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (2)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (0)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    programmers
    백준
    소수
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
Programmers / 소수 찾기 / Python 파이썬
상단으로

티스토리툴바