나의 작은 valley

[cosPro 1급] 숫자 만들기, 자아도취 수 본문

Computer Science/[알고리즘]

[cosPro 1급] 숫자 만들기, 자아도취 수

붕옥 아이젠 2023. 8. 13. 13:46
728x90

숫자 만들기

다음과 같이 새로운 숫자를 생성할 때, n번째 생성할 숫자를 구하려고 합니다.

  1. 첫 번째 수는 1입니다.
  2. 다음수를 1의 자리에 추가합니다.
  3. 만든 숫자를 뒤집습니다.
  4. 숫자 1부터 9까지 추가하면서 2, 3번째 단계를 반복합니다.
  5. 숫자 9까지 추가했다면 다시 숫자 1부터 추가합니다.

n이 매개변수로 주어질 때, n번째로 생성할 수를 문자열 형태로 return 하는 solution 함수를 작성하려 합니다. 위 구조를 참고하여 코드가 바르게 동작하도록 빈칸을 채워주세요.

▣ 매개변수 설명

숫자 n이 solution 함수의 매개변수로 주어집니다.

  • n은 1 이상 1,000 이하인 자연수입니다.

▣ return값 설명

solution 함수는 n번째 수를 문자열 형태로 return 합니다.

 

첫 번째 숫자: 1
두 번째 숫자: 21
세 번째 숫자: 312
네 번째 숫자: 4213
다섯 번째 숫자: 53124

 

문제 코드)

def solution(n):
    answer = ''
    for i in range(n):
        answer += str(@@@)
        answer = answer[@@@]
    return answer

 

 

정답 코드)

def solution(n):
    answer = ''
    for i in range(n):
        answer += str(i+1)
        answer = answer[::-1]
    return answer
n = 5
ret = solution(n)
print("solution 함수의 반환 값은", ret, "입니다.")

이거는 쉽다. 문자열에 다음 문자 추가하고 역순으로 문자열을 바꿔서 저장하면 된다. 

 

 

 

자아도취 수

어떤 자리 수 k가 주어졌을 때 각 자릿수의 k 제곱의 합이 원래 수가 되는 수를 자아도취 수라고 합니다. 예를 들어 153은 세 자리 자아도취 수입니다.

자연수 k가 매개변수로 주어질 때, k 자리 자아도취 수들을 리스트에 오름차순으로 담아 return 하도록 solution 함수를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.

▣ 매개변수 설명

k가 solution 함수의 매개변수로 주어집니다.

  • k는 3 이상 6 이하인 자연수입니다.

▣ return 값 설명

k 자리 자아도취 수를 오름차순으로 정렬한 뒤 리스트에 담아 return 합니다.

 

문제 코드)

def power(base, exponent):
    val = 1
    for i in range(exponent):
        val *= base
    return val

def solution(k):
    answer = []
    bound = power(10, k)
    for i in range(bound // 10, bound):
        current = i
        calculated = 0
        while current != 0:
            @@@
            @@@
        if calculated == i:
            answer.append(i)
    return answer

 

정답 코드)

def power(base, exponent):
    val = 1
    for i in range(exponent):
        val *= base
    return val #1000

def solution(k):
    answer = []
    bound = power(10, k)
    for i in range(bound // 10, bound):
        current = i
        calculated = 0
        while current != 0:
            calculated += power(current % 10,3)
            current //= 10
            
        if calculated == i:
            answer.append(i)
    return answer
k = 3
ret = solution(k)
print("solution 함수의 반환 값은", ret, "입니다.")

정답 부분만 설명을 하면 

 

current % 10 은 무조건 1~9 즉 한자리 숫자이고 이 한자리 숫자는 숫자 문자열의 1의 자리를 말한다. 그 값을 3승한 값을 power 함수는 반환한다.

 

반환된 3승된 1의 자리를 calculated에 누적하여 더해준다.

 

또한 1의 자리 숫자를 꺼내서 더해줬으면 숫자 문자열의 1의 자리는 10의 자리숫자가 대체해야 되기 때문에 몫의 연산자를 써서 수정해주었다.

 

728x90
Comments