Python/프로그래머스

[programmers] 스킬 체크 테스트 Leve.1 (Python/파이썬)

이니니 2022. 4. 19. 21:03

< 문제 1 >

 

문제

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

 

제한 조건

x는 1 이상, 10000 이하인 정수입니다.

 

입출력 예

arr return
10 true
12 true
11 false
13 false

입출력 예 #1
10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.

입출력 예 #2
12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.

입출력 예 #3
11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.

입출력 예 #4
13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.

 

▶ my code

def solution(x):
    my_num = 0
    for i in range(len(str(x))):
        my_num += int(str(x)[i])
    
    if x % my_num == 0:
        answer = True
    else:
        answer = False
    
    return answer

 

▶ 아이디어

쉬운 문제이니, 문제를 최대한 빨리 이해하고 빠르게 푸는 습관을 들입시다

< 문제 2 >

 

문제

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

 

제한 조건

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

 

입출력 예

n result
45 7
125 229

입출력 예 #1
답을 도출하는 과정은 다음과 같습니다.
n (10진법) n (3진법) 앞뒤 반전 (3진법) 10진법으로 표현
45 1200 0021 7
따라서 7을 return 해야 합니다.

입출력 예 #2
답을 도출하는 과정은 다음과 같습니다.

n (10진법) n (3진법) 앞뒤 반전 (3진법) 10진법으로 표현
125 11122 22111 229
따라서 229를 return 해야 합니다. 

 

▶ my code

def solution(n):
    answer = 0
    
    num = ''
    while n > 0:
        n, mod = divmod(n, 3)
        num += str(mod)
    
    answer = int(num, 3)
    
    return answer

 

▶ 아이디어

n, mod = divmoid(n, m) 은 n을 m으로 나눈 몫을 n에 저장하고, 나머지를 mod에 저장합니다. 
10진법을 3진법으로 바꾸는 방법을 이렇게 간단하게 표현해봅시다.