2진수, 3진수, k진수 변환하는 법 | 파이썬 k진수 변환 | 소수찾기 | 프로그래머스 k진수에서 소수찾기 파이썬

2024. 2. 15. 21:08·Algorithm

k진수 찾기랑 소수 찾기는 코테에서 꽤나 빈출 유형으로 나오는데 두 가지가 결합된 문제가 있어 정리해본다.  기억해두고 더 이상 헷갈리지 말자. 

https://school.programmers.co.kr/learn/courses/30/lessons/92335

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

k진수 

 k진법이란 0부터 k개의 숫자를 사용해서 수를 표현하는 방법으로, 2진법은 0과 1의 2가지 숫자로 수를 표현한다. 3진법은 0,1,2의 3가지 숫자로 수를 표현한다.  즉, 0부터 k-1까지의 숫자로 수를 표현하는 것을 말한다. 

구하는 방법은 그림과 같다. k진수로 수를 나타내고 싶을 때, k로 몫이 k보다 작아질때까지 나눠준다. 그 후, 몫과 지금까지 나눈 나머지를 쭉 써주면 된다. 

파이썬으로는 다음과 같이 구현할 수 있다. 나머지를 쭉 더해주고 몫을 새로운 n으로 업데이트해준다. 

number =''
while n :
    b = n% k #나머지  
    number = str(b)+number #join으로 하면 나중에 뒤집어줘야함
    n = n // k  #몫

 

소수 찾기 

소수는 1과 자기 자신만을 약수로 가지는 수이다. 즉, 1과 자기자신 외에는 절대 나누어 떨어지지 않는 수를 의미한다. 

만약 n을 1~n 사이의 어떤 숫자로 나누었을 때 0으로 나누어 떨어지는 숫자가 있다면 소수가 아니게 되는 것이다.  

하지만 2부터 n-1까지의 숫자로 나누어 떨어지는지 전부 확인할 경우 굉장히 많은 시간이 소요된다. 

10정도야 2부터 9까지 모두 나눠봐도 탐색하는데에 많은 시간이 소요되지 않지만 238597129576106같은 큰 숫자는 모두 탐색하기가 어렵다. 

n의 모든 약수는 n/2보다 작다는 성질을 가진다. 따라서 굳이 n-1까지 전부 탐색하지 않고 2/n까지만 탐색해도 된다. 하지만 이 방법보다 더 크게 시간 복잡도를 줄일 수 있는 방법이 있다. 

바로 제곱근보다 작은 수들 중에 약수가 없다면, 제곱근보다 큰 수들은 n의 약수가 아니다라는 성질을 이용하는 것이다. 

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

 

이렇게 하면 해당 숫자가 소수인지 아닌지 판별할 수 있다.

 

k진수에서 소수찾기 

이를 활용하여 문제를 풀 수 있다.

#n을 k진수로 변환하였을 떄, 변환된 수 안에 조건에 맞는 소수가 몇개 있는지 return 
def solution(n, k):
    ##우선 k진수로 변환 
    number =""
    while n :
        number = str(n% k)+number #join으로 하면 나중에 뒤집어줘야함
        n = n // k  #몫
    number=number.split("0")  #0기준으로 나누기 
    print(number)
    ##조건에 맞는 소수 찾기: 중복되는 소수도 따로 count
    cnt = 0 
    for i in number:
        if len(i)==0:  
            continue
        if int(i)<2:
            continue
        prime=True
        for j in range(2, int(int(i)**0.5 + 1)):
            if int(i) % j ==0:
                prime=False
                break
        if prime:
            cnt+=1
    return cnt
저작자표시 비영리 변경금지 (새창열림)

'Algorithm' 카테고리의 다른 글

[Python] 백준 2164, 백준 1929, 백준 1012 풀이  (1) 2024.10.20
[코딩테스트/ Python] 시간을 단축시켜주는 정규 표현식/프로그래머스 신규 아이디 추천  (1) 2023.06.11
[코딩테스트/ Python] 탐색 알고리즘 DFS/ BFS  (0) 2023.05.13
[코딩테스트/Python] 꼭 필요한 자료구조 기초: 재귀함수  (0) 2023.05.08
[코딩테스트 /Python] 프로그래머스 기능 개발  (0) 2023.05.04
'Algorithm' 카테고리의 다른 글
  • [Python] 백준 2164, 백준 1929, 백준 1012 풀이
  • [코딩테스트/ Python] 시간을 단축시켜주는 정규 표현식/프로그래머스 신규 아이디 추천
  • [코딩테스트/ Python] 탐색 알고리즘 DFS/ BFS
  • [코딩테스트/Python] 꼭 필요한 자료구조 기초: 재귀함수
재온
재온
  • 재온
    Carpe Diem
    재온
  • 전체
    오늘
    어제
    • 분류 전체보기 (75)
      • AI (18)
        • NLP (5)
        • Toxicity Prediction (6)
        • Paper review (5)
      • Statistics (5)
        • mathematical statistics (2)
        • Time Series (3)
      • Algorithm (16)
      • Deep Learning (1)
      • Machine Learning (3)
      • TIL (11)
      • 공모전 및 프로젝트 (2)
      • 회고록 (3)
      • IT News (2)
      • 취준일기 (7)
      • 기타 (2)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      Chatgpt api inference
      SKT AI Fellowship 5기 후기
      time series
      Transformer기초
      알고리즘
      Seqeunce to seqeunce
      크롬드라이버크롤링
      AI 뉴스레터
      ChatGPT
      코딩테스트 개념
      chatgpt api 발급받기
      시계열
      Graph AI
      ssh 접속오류
      Prompting
      파이썬
      노래가사분석
      Greedy 알고리즘
      코딩테스트 파이썬
      tokenization repair
      음악가사분석
      chatgpt api 실습
      맞춤법 교정 모델
      NLP
      Prompt pattern
      SKT AI Fellowship
      NLP Paper
      SMILES to vector
      이것이코딩테스트다
      코딩테스트
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.4
    재온
    2진수, 3진수, k진수 변환하는 법 | 파이썬 k진수 변환 | 소수찾기 | 프로그래머스 k진수에서 소수찾기 파이썬
    상단으로

    티스토리툴바