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'는 숫자 또는 숫자 형식의 문자열이 될 수 있다.
2. 두 인자 사용 : int(str, base)
이 경우 str에는 정수로 변환 가능한 객체, str, bytes, bytearray 형식이 될 수 있으며, 리스트는 변환할 수 없다.
int(str, 3)이 들어오면 str이 3진법 숫자를 나타낸다고 가정하고, 이를 10진법 정수로 변환한다.
* 정수로 변환 가능한 객체 : 객체가 __int__(), __index__() 또는 __trunc__() 메서드를 정의하고 있으면, 해당 메소드를 호출하여 정수로 변환한다.
int()함수는 바이트 객체 `b123`를 (base=10이기 때문에) 10진수로 해석하려고 시도한다.
이 때 b'123'은 ASCII 코드로 '123'을 문자열을 나타내는 배열이며, 이는 문자 '1', '2', '3'에 해당하는 바이트값 [49,50,51]로 구성된다. 파이썬 int() 함수는 이 바이트 배열을 마치 숫자 문자열 '123'인 것처럼 처리하여 10진수로 변환하므로 출력은 123이 된다.
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()함수는 바이트 객체 `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 |