[4코1파] 4명의 안드로이드 개발자와 1명의 파이썬 개발자의 코딩 테스트 서막 : 4코1파

Rule :

하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원

START :

[3코1파] 2023.01.04~ (70일차)
[4코1파] 2023.01.13~ (61일차)

Today :

2023.03.14 [70일차]

프로그래머스 LV 2
k진수에서 소수 개수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/92335

문제 설명

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

0P0처럼 소수 양쪽에 0이 있는 경우
P0처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우
0P처럼 소수 왼쪽에만 0이 있고 오른쪽에는 아무것도 없는 경우
P처럼 소수 양쪽에 아무것도 없는 경우
단, P는 각 자릿수에 0을 포함하지 않는 소수입니다.
예를 들어, 101은 P가 될 수 없습니다.
예를 들어, 437674을 3진수로 바꾸면 211020101011입니다. 여기서 찾을 수 있는 조건에 맞는 소수는 왼쪽부터 순서대로 211, 2, 11이 있으며, 총 3개입니다. (211, 2, 11을 k진법으로 보았을 때가 아닌, 10진법으로 보았을 때 소수여야 한다는 점에 주의합니다.) 211은 P0 형태에서 찾을 수 있으며, 2는 0P0에서, 11은 0P에서 찾을 수 있습니다.

정수 n과 k가 매개변수로 주어집니다. n을 k진수로 바꿨을 때, 변환된 수 안에서 찾을 수 있는 위 조건에 맞는 소수의 개수를 return 하도록 solution 함수를 완성해 주세요.

제한 사항

1 ≤ n ≤ 1,000,000
3 ≤ k ≤ 10

입출력 예

입출력 예 설명

입출력 예 #1
문제 예시와 같습니다.

입출력 예 #2
110011을 10진수로 바꾸면 110011입니다. 여기서 찾을 수 있는 조건에 맞는 소수는 11, 11 2개입니다. 이와 같이, 중복되는 소수를 발견하더라도 모두 따로 세어야 합니다.

문제 풀이 방법

일단 여기서 구현해야 할 것
1. 들어오는 10진수의 숫자를 k 진수로 변환할 것
2. 소수인지 아닌지 판별 할 것

k진수 변환은 convert_int로 변환하는 함수를 만들었고,
소수 유무 또한 is_Prime 함수를 통해서 소수 유/무 함수를 만들었음
다 렙 1따리 에서 풀었던 문제들이라 이걸 엮어서 하나의 문제 풀이에 써먹는 문제 였다
별로 어렵지 않음

처음에 테스트케이스 12가 에러나서 왜 그러나 했더니
0을 기준으로 split 했을 때 빈 문자열이 한번 이상 나올 수 있는데
위에서 한 번만 제거하는 remove 함수를 사용했기 때문이었음

그래서 맨 아랫단에서 빈문자열이면 continue 해서 넘겨버리는
로직으로 수정했더니 통과했다

내 코드

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

def convert_int(n,q):
    if q==10:
        return str(n)
    tmp = ''
    while n>0:
        n, mod = divmod(n,q)
        tmp += str(mod)
    return tmp[::-1]

def solution(n, k):
    answer = 0
    convert_num = convert_int(n,k)
    convert_lst = convert_num.split('0')
    
    for c in convert_lst:
        if c=='':
            continue
        answer += is_Prime(int(c)) 
    return answer

증빙

다른 사람 풀이

가장 좋아요를 많이 받은 새럼도 소수 판별과 진수변환을 함수로 만들어서 엮어서 풀어서 패스

여담

카카오 [3차] 압축 문제 풀다가 도망쳐서 푼 문제
문제이름이 어려워보여서 안풀고 있었는데 이게 더 쉽잖아 참나

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글