[Python] Programmers lv1 콜라츠 추측, 정수 제곱근 판별, 자연수 뒤집어 배열로 만들기, x만큼 간격이 있는 n개의 숫자
1. 콜라츠 추측
def solution(num):
answer = 0
while num > 1:
if num % 2 == 0:
num = num/2
else:
num = num * 3 + 1
answer += 1
if answer >= 500:
answer = -1
break
return answer
주어진 조건을 보면 아래와 같다.
1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
이러한 조건으로 미루어 보면, 모든 수가 1이 되기 직전에는 2인 상태일 것이다. 그러므로, 주어진 숫자가 1보다 큰 동안에 반복적으로 조건문이 실행되어야 하며, 이를 위해 while을 이용함으로써, num = 1이 되는 순간 반복문이 종료될 것이다. 반복문 안에는 주어진 조건대로, num을 2로 나누어 떨어진다면 2로 나눈 값을 num에 대입하고, 그렇지 않으면 3을 곱한 뒤 1을 더하도록 입력한다. 이 조건이 한 번 돌 때마다 answer에 1을 더하도록 하고, answer = 500이 되면 answer = -1로 바꾼 뒤 역시 반복문을 중단한다.
2. 정수 제곱근 판별
import math
def solution(n):
x = math.sqrt(n)
if x % 1 == 0:
answer = int(math.pow(x+1, 2))
else:
answer = -1
return answer
먼저 제곱근을 구하는 sqrt 매소드와 제곱을 구하는 pow 매소드를 이용하기 위해 math를 import한다. x 변수를 만들어 math의 제곱근을 할당한다. n은 자연수라는 조건이 있었으므로, x를 1로 나눈 나머지가 0이라면 x 역시 자연수가 된다. x가 자연수라면 x+1에 pow 매소드로 제곱을 해 주고, 자연수가 아닌 경우에는 -1을 반환한다.
3. 자연수 뒤집어 배열로 만들기
def solution(n):
answer = []
for i in str(n):
answer.append(int(i))
answer.reverse()
return answer
자연수 n의 각 자리의 숫자를 배열에 넣기 위해 문자열로 만든 뒤, 다시 숫자로 만들어 answer 배열에 append함으로써 n의 각 자리 숫자를 요소로 가지는 배열을 얻는다. reverse를 통해 이를 뒤집는다.
4. x만큼 간격이 있는 n개의 숫자
def solution(x, n):
answer = []
elements = 0
while len(answer) < n:
elements += x
answer.append(elements)
return answer
answer은 빈 배열로 시작해서 x의 배수인 elements가 계속 추가될 것이다. 그러므로 answer의 길이가 n과 같아지기 전까지 반복을 수행하는데, 반복문이 수행될 때마다 elements에 x를 더한 뒤 answer에 추가한다.
[Python] Programmers lv1 이상한 문자 만들기, 행렬의 덧셈, 예산 (0) | 2021.05.16 |
---|---|
[Python] Programmers lv1 제일 작은 수 제거하기, 정수 내림차순으로 배치하기, 최대공약수와 최소공배수 (0) | 2021.05.15 |
[Python] Programmers lv1 핸드폰 번호 가리기, 하샤드 수, 자릿수 더하기 (0) | 2021.05.13 |
[Python] Programmers lv1 문자열 내림차순으로 배치하기 (0) | 2021.05.11 |
[Python] Programmers lv1 문자열 다루기 기본, 문자열 내 p와 y의 개수 (0) | 2021.05.08 |
댓글 영역