수미니그
개발자 X
수미니그
전체 방문자
오늘
어제
  • 전체 (17)
    • Algorithms (13)
      • Concepts (0)
      • 백준 (BOJ) (4)
      • 프로그래머스 (Programmers) (9)
    • SQL (4)
    • 일상 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 해시
  • programmers
  • DFS
  • 정렬
  • 알고리즘 풀이
  • Python
  • 집계 함수
  • MAX
  • 스택
  • 구현
  • 프로그래머스
  • Algorithm
  • 백준
  • SQL
  • group by
  • BOJ
  • 자료구조
  • count
  • 알고리즘
  • 소수
  • MIN
  • n진수
  • Dictionary
  • DP
  • BFS
  • select
  • Lambda
  • sum

최근 댓글

최근 글

@ 수미니그
hELLO · Designed By 정상우.
수미니그

개발자 X

[프로그래머스] k진수에서 소수 개수 구하기 (Python)
Algorithms/프로그래머스 (Programmers)

[프로그래머스] k진수에서 소수 개수 구하기 (Python)

2022. 3. 23. 19:24
 

코딩테스트 연습 - k진수에서 소수 개수 구하기

문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소

programmers.co.kr

프로그래머스 k진수에서 소수 개수 구하기 문제 설명
프로그래머스 k진수에서 소수 개수 구하기 제한사항 및 입출력 예시


  • 2022 KAKAO BLIND RECUITMENT 분류 문제이며 프로그래머스 LEVEL 2 난이도의 문제다
  • 문제 난이도 자체는 어렵지 않으나 N진수 변환, 소수 판별 등 기본기가 중요한 문제다
  • 문제 조건에 따르면 P는 0사이 또는 0의 좌, 우에 위치하므로 split()을 이용하면 각 P를 구할 수 있다
  • 따라서 순서대로 입력 받은 n을 k진수로 변환 후, split("0")로 숫자를 받아서 소수인지 판별해주면 된다 

 

k진수 변환

10진수를 k진수로 변환하는 방법은 n에서 k로 나눈 나머지를 역순으로 바꾸면 된다

def k_num(n,k):
    #10진수의 경우 변환할 필요가 없으므로 바로 return 해준다
    if k == 10:
        return n
    else:
        new_n = ""
        while n > 0:
            new_n += str(n % k)
            n = n // k
        return new_n[::-1]

 

 

소수 판별

소수는 1과 n 이외의 숫자로 나눠지지 않으므로, 2부터 n의 루트까지 한 번이라도 나누어 떨어질 때 False를 return 한다
* 참고로 1은 소수가 아니므로 1보다 작을 경우 역시 False를 return 한다

def isPrime(n):
    if n <= 1:
        return False
    for i in range(2, int(n**(1/2)+1)):
        if n % i == 0:
            return False
    return True

 

전체 코드

따라서 전체 코드는 아래와 같다

def k_num(n,k):
    if k == 10:
        return n
    else:
        new_n = ""
        while n > 0:
            new_n += str(n % k)
            n = n // k
        return new_n[::-1]

def isPrime(n):
    if n <= 1:
        return False
    for i in range(2, int(n**(1/2)+1)):
        if n % i == 0:
            return False
    return True
    
def solution(n, k):
    answer = 0
    num = k_num(n,k)
    nums = str(num).split("0")
    for x in nums:
    	#x가 비어있는 경우를 예외처리 한다
        if x and isPrime(int(x)):
            answer += 1
    return answer

 

GitHub에서 코드 보기

'Algorithms > 프로그래머스 (Programmers)' 카테고리의 다른 글

[프로그래머스] 야근 지수 (Python)  (0) 2022.03.25
[프로그래머스] 주식가격 (Python)  (0) 2022.03.25
[프로그래머스] 베스트앨범 (Python)  (0) 2022.03.25
[프로그래머스] 가장 큰 수 (Python)  (0) 2022.03.25
[프로그래머스] 크레인 인형뽑기 게임 (Python)  (0) 2022.03.23
    수미니그
    수미니그

    티스토리툴바