상세 컨텐츠

본문 제목

[Python] Programmers lv1 콜라츠 추측, 정수 제곱근 판별, 자연수 뒤집어 배열로 만들기, x만큼 간격이 있는 n개의 숫자

Coding Test/[Python] Programmers lv1

by winCow 2021. 5. 14. 22:31

본문

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에 추가한다. 

 

 

 

 

 

관련글 더보기

댓글 영역