happyso
study with happyso
happyso
전체 방문자
오늘
어제
  • 분류 전체보기 (302)
    • GIT (3)
    • 컴퓨터 기본 개념 (29)
    • 알고리즘 (125)
      • 알고리즘 문제 (115)
      • 알고리즘 개념 (10)
    • Go (2)
    • 클라우드 (54)
      • DevOps (4)
      • Kubernetes(쿠버네티스) (33)
      • AWS (6)
      • CKA (8)
    • 리눅스(Linux) (18)
      • 컨테이너(Container) (8)
    • Front (22)
      • JavaScript (2)
      • React (20)
    • Python (21)
      • Python 웹 크롤링 (11)
      • Django (7)
      • MachineLearning (3)
    • 데이터베이스 (6)
      • MariaDB (2)
      • MongoDB (4)
    • C언어 (5)
    • Trouble Shooting (2)
    • 네트워크 (8)
      • CCNA (5)
    • 보안 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • kubernetes
  • Patch
  • 18
  • 15
  • replace
  • edit
  • apply

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
happyso

study with happyso

알고리즘/알고리즘 문제

[python] 프로그래머스 > 124 나라의 숫자

2020. 8. 27. 15:40

programmers.co.kr/learn/courses/30/lessons/12899

 

코딩테스트 연습 - 124 나라의 숫자

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다. 124 나라에는 자연수만 존재합니다. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

programmers.co.kr

 

<문제>

- 문제 설명

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.

  1. 124 나라에는 자연수만 존재합니다.
  2. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.

10진법124 나라10진법124 나라

10진법 124나라 10진법 124나라
1 1 6 14
2 2 7 21
3 4 8 22
4 11 9 24
5 12 10 41

자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.

 

- 제한사항

  • n은 500,000,000이하의 자연수 입니다.

- 입출력 예

nresult

n result
1 1
2 2
3 4
4 11

 

<나의 풀이 - 실패 버전>

def solution(n):
    answer = ''
    land_number = ['1','2','4']
    answer = land_number[(n%3)-1]+answer
    moc = n // 3
    if n%3 == 0:
        moc -= 1
    while int(moc) != 0:
        answer = land_number[(moc%3)-1]+answer
        moc = moc // 3
        if moc%3 == 0:
            moc -= 1
    return answer

 

<구글에 찾아본 코드>

def solution(n):
    answer = ''
    while n > 0:
        n -= 1
        answer = '124'[n%3] + answer
        n //= 3
    return answer

모르겠어서 구글에 검색해서 찾아봤다.... 엄청나게 간단하게 풀어서 충격받았다.

 

 

<다른 사람의 풀이>

def solution(n):
    answer = ''
    while n>0:
        if n%3 == 0:
            answer = '4'+answer
            n = int(n/3) -1
        else:
            answer = str(n%3) + answer
            n = int(n/3)
        
    return answer

- 위에 코드는 내가 구현하고 싶었던 코드이다! 이렇게 간단하게 하면 될것을 이상한 짓을 하고있었다. ㅇㅅㅇ

 

def change124(n):
    if n<=3:
        return '124'[n-1]
    else:
        q, r = divmod(n-1, 3) 
        return change124(q) + '124'[r]

 

def change124(n):
    answer = "0"

    return ['4', '1', '2'][n%3] if n < 4 else change124((n-1) // 3) + ['4', '1', '2'][n%3]

 

def solution(n):
    a = []
    while n:
        if str(n % 3) != '0':
            a.insert(0, str(n % 3))
        else:
            a.insert(0, '4')
            n -= 1
        n //= 3
    return ''.join(a)

 

'알고리즘 > 알고리즘 문제' 카테고리의 다른 글

[python] 프로그래머스 > DFS/BFS > 네트워크  (0) 2020.08.31
[python] 프로그래머스 > DFS/BFS > 단어변환  (1) 2020.08.31
[python] 프로그래머스 > 탐욕법 > 단속카메라  (0) 2020.08.24
[python] 프로그래머스 > 깊이/너비 우선 탐색(DFS/BFS) > 타겟 넘버  (0) 2020.08.23
[python] 프로그래머스 > level1 > 같은 숫자는 싫어!  (0) 2020.08.22
    '알고리즘/알고리즘 문제' 카테고리의 다른 글
    • [python] 프로그래머스 > DFS/BFS > 네트워크
    • [python] 프로그래머스 > DFS/BFS > 단어변환
    • [python] 프로그래머스 > 탐욕법 > 단속카메라
    • [python] 프로그래머스 > 깊이/너비 우선 탐색(DFS/BFS) > 타겟 넘버
    happyso
    happyso

    티스토리툴바