3진법 뒤집기
답:
def solution(n):
answer = 0
num_str = ""
while(n != 0):
num_str += str(n % 3)
n = n // 3
for i in range(2, len(num_str)+1):
# i의 반대되는 수가 3승으로 들어가야함, -2부터 1승 시작
answer += int(num_str[-i]) * (3**(i-1))
return answer + int(num_str[-1])
계산이 약간 복잡했지만 풀어낼 수 있어서 기분좋당!
+++ int()의 기능. str으로 된 숫자를 2번째인자 진법으로 변환해줌..
def solution(n):
num_str = ""
while(n != 0):
num_str += str(n % 3)
n = n // 3
return int(num_str, 3)
문제 분석 및 해석
자연수 n이 매개변수
n을 3진법 상에서 앞뒤로 뒤집은 후,
다시 10진법으로 표현한 수를 return
>> 풀이생각
1) 3으로 나누어 각 나머지를 자리수에 더해두기
45 % 3 == 0
15 % 3 == 0
5 % 3 == 2
1 % 3 == 1
본래의 3진법수는 = 1200(3)
"0021" <- str으로 더해주면 이렇게 바로 바뀐채도 더해질듯!
1의 자리수는 그냥 더하고
10의 자리수 이상은 3^승을 곱해서 더해주기
2 * 3 + 1 = 7
리뷰
다른사람의 풀이를 보며 int의 기능을 배울 수 있었다.
int() : 1번째 인자를 str, 2번째인자를 숫자로 넣으면 해당 진법을 10진법 수로 변환해줌..!
푸드파이터대회
답:
def solution(food):
answer = ''
new_food = [1]
for i in range(1, len(food)):
count = (food[i] // 2)
new_food.append(count)
for i in range(1, len(new_food)):
answer += str(i) * new_food[i]
answer += "0"
for i in range(len(new_food)-1, 0, -1):
answer += str(i) * new_food[i]
return answer
answer에 [::-1]연산자로 거꾸로 입력해주는 방법도 있다!!
def solution(food):
answer = ''
new_food = [1]
for i in range(1, len(food)):
count = (food[i] // 2)
new_food.append(count)
for i in range(1, len(new_food)):
answer += str(i) * new_food[i]
return answer + "0" + answer[::-1]
문제 분석 및 해석
food의 배열index에 따라 음식의 개수가 주어진다
0은 물, 항상 1개
food[i]는 i번 음식
주어진 i번 음식을 차례로 문자열로 만들고 0 넣고 대칭되도록 반대쪽 값 넣어주기
>> 풀이생각
음식별로 몫을 구해 new_food배열로 나타내기
1 ~ new_food 배열에 각 index를 곱해줌
0 더하기,
new_food 을 뒤에서부터 거꾸로 index를 곱해 문자열에 더해주기
체크!
[::-1]
범위 연산자로 문자열 뒤집기가 가능!
마찬가지로 배열 뒤집기도 가능하다.
예산
답:
def solution(d, budget):
result = []
for num in sorted(d):
if budget < num:
break
budget = budget - num
result.append(num)
return len(result)
list에 저장해 길이를 구하는 방법
for문이 한 번 돌때마다 +1을 해주는 방법
아래가 시간은 조금 덜 걸림!
def solution(d, budget):
result = 0
for num in sorted(d):
if budget < num:
break
budget = budget - num
result += 1
return result
문제 분석 및 해석
예산에 맞는 배열을 구하고
배열에서 최대 개수인 배열을 구해 return
>> 풀이생각
1) 일단 작은 수로 정렬해서 budget에서 넘치지 않을 만큼(빼고 남은 예산 저장) 빼내어 배열을 만들기
2) 저장한 배열의 길이를 return
리뷰
append(), len()함수가 동작하는데에는 역시 조금 더 시간이 걸리게 된다
시간복잡도가 걱정된다면 될 수 있는 한 일반식을 사용하는 걸로!
'알고리즘 풀이' 카테고리의 다른 글
[알고리즘] 프로그래머스 | 삼총사, 키패드 누르기 (0) | 2023.08.11 |
---|---|
[알고리즘] 프로그래머스 | 완주하지 못한 선수, 과일 장수 (0) | 2023.08.10 |
[알고리즘] 프로그래머스 | 콜라츠 추측, 부족한 금액 계산하기, 최대공약수와 최소공배수 (0) | 2023.08.08 |
[알고리즘] 프로그래머스 | K번째 수, 숫자 문자열과 영단어 (0) | 2023.08.07 |
[알고리즘, 정보] int를 각 자리수로 나누어 list 만들기 (2) | 2023.08.05 |