[Python] 3진법 뒤집기, int() 메소드

2024. 7. 30. 17:27·study/Programmers
728x90

 

문제링크 및 설명

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

 

프로그래머스

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

programmers.co.kr

접근법

  • 3으로 나눈 나머지를 answer에 더하는 과정을 while문으로 반복하였다.
def solution(n):
    answer = 0
    cur_n = n
    while(cur_n >= 3):
        remain = cur_n % 3
        answer = answer * 3 + remain
        cur_n = cur_n // 3
    if cur_n > 0:
        answer = answer * 3 + cur_n
    return answer

아쉬웠던 점 / 개선되면 좋을 점

Case 1

  • while 문의 조건을 조금 수정하는 것으로 아래 if문을 제거할 수 있었다.
  • while 문의 조건을 새우는 것이 항상 어려워 했기 때문에 while 문에 대해 좀 더 공부해볼 필요가 있는 것 같다..
def solution(n):
    answer = 0
    cur_n = n
    while(cur_n > 0):
        remain = cur_n % 3
        answer = answer * 3 + remain
        cur_n = cur_n // 3
    return answer

 

Case 2

  • python의 내장함수 int(str, base)를 활용하여 더 쉽게 수정할 수 있었다.
더보기
python int() 메소드

int() 함수는 파이썬의 내장 함수 중 하나로, 문자열 또는 숫자 데이터를 정수로 변환할 수 있다.
int() 함수는 두가지 주요 형태로 사용될 수 있다.

1. 단일 인자 사용 : int(x)
이 경우 'x'는 숫자 또는 숫자 형식의 문자열이 될 수 있다.
print("case 1-1:", int(123)) 
print("case 1-2:", int(123.45))

# 출력 결과
# case 1-1: 123
# case 1-2: 123​


2. 두 인자 사용 : int(str, base)
이 경우 str에는 정수로 변환 가능한 객체, str, bytes, bytearray 형식이 될 수 있으며, 리스트는 변환할 수 없다.
int(str, 3)이 들어오면 str이 3진법 숫자를 나타낸다고 가정하고, 이를 10진법 정수로 변환한다.

* 정수로 변환 가능한 객체 : 객체가 __int__(), __index__() 또는 __trunc__() 메서드를 정의하고 있으면, 해당 메소드를 호출하여 정수로 변환한다.
# str 타입을 10진수 정수로 변환
print("case2-1:", int("11", 2))

# 10진수 bytes 형식을 10진수 정수로 변환
print("case2-2:", int(b'123', 10)) 

# 8진수 bytesarray 형식을 10진수 정수로 변환
print("case2-3:", int(bytearray(b'777'), 8))

# 출력 결과
# case2-1: 3
# case2-2: 123
# case2-3: 511

# 리스트는 변환이 되지 않음을 주의해야한다.
# print(int([1,2,3], 10)) -> TypeError를 발생시킨다.


3. 부가 설명

int(b'123', 10) 에 대해서 조금 더 설명을 해보자면 아래와 같다.
int()함수는 바이트 객체 `b123`를 (base=10이기 때문에) 10진수로 해석하려고 시도한다. 
이 때 b'123'은 ASCII 코드로 '123'을 문자열을 나타내는 배열이며, 이는 문자 '1', '2', '3'에 해당하는 바이트값 [49,50,51]로 구성된다. 파이썬 int() 함수는 이 바이트 배열을 마치 숫자 문자열 '123'인 것처럼 처리하여 10진수로 변환하므로 출력은 123이 된다.
# 바이트 문자열 b'123'을 ASCII 값으로 변환하여 출력
byte_representation = b'123'

# 각 바이트를 정수로 변환하여 리스트로 출력
ascii_values = list(byte_representation)
print(ascii_values)  # 출력: [49, 50, 51]​
def solution(n):
    tmp = ''
    while n:
        tmp += str(n % 3)
        n = n // 3

    answer = int(tmp, 3)
    return answer

 

사용된 알고리즘

 

반복문?

728x90

'study > Programmers' 카테고리의 다른 글

[Python] 과제 진행하기  (0) 2024.08.27
[Python] 2개 이하로 다른 비트  (0) 2024.07.30
[Python] 오픈채팅방  (1) 2024.07.24
[Python] 무인도 여행  (1) 2024.07.16
[Python] 연속된 부분 수열의 합  (1) 2024.07.15
'study/Programmers' 카테고리의 다른 글
  • [Python] 과제 진행하기
  • [Python] 2개 이하로 다른 비트
  • [Python] 오픈채팅방
  • [Python] 무인도 여행
bbooo
bbooo
  • bbooo
    bbooo
    bbooo
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • study (61)
        • 백준(BOJ) (34)
        • Programmers (15)
        • LeetCode (9)
      • AI (4)
        • Paper (0)
      • SSAC X IFFEL (4)
        • DeepML (1)
        • 밑바닥 부터 시작하는 딥러닝 (2)
      • 회고 (46)
      • Error (10)
      • Setting (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬 과제 진행하기
    set
    그리디 알고리즘
    python 석유시추
    백트래킹
    typeerror: sequence item 0: expected str instance int found
    vscode
    백준 2470
    Counter
    99클럽
    개발자 취업
    Til
    sequence item 0: expected str instance int found
    코딩테스트 준비
    백준
    sort
    programmers 과제 진행하기
    docker
    문자열을 원하는 길이로
    항해99
    두 포인터
    LeetCode
    programmers 석유시추
    프로그래머스 석유시추
    파이썬
    풀이 실패
    투포인터
    파이썬 석유시추
    python 과제 진행하기
    브루트포스
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
bbooo
[Python] 3진법 뒤집기, int() 메소드
상단으로

티스토리툴바