상세 컨텐츠

본문 제목

[Python] Programmers lv1 제일 작은 수 제거하기, 정수 내림차순으로 배치하기, 최대공약수와 최소공배수

Coding Test/[Python] Programmers lv1

by winCow 2021. 5. 15. 23:45

본문

1. 제일 작은 수 제거하기

def solution(arr):
    answer = []
    throw_this_away = min(arr)
    for i in arr:
        if i != throw_this_away:
            answer.append(i)
    if(len(answer) == 0):
        answer = [-1]
    return answer

먼저, 주어진 배열에서 가장 작은 숫자를 throw_this_away 변수에 할당한다. 주어진 배열의 모든 원소에 대해서, throw_this_away 가 아닌 원소들은 answer 배열로 넣고, answer를 반환한다. answer이 비어있을 경우에는 -1을 원소로 넣은 뒤 반환한다.

 

 

2. 정수 내림차순으로 배치하기

import math
def solution(n):
    answer = 0
    int_list = []
    for i in str(n):
        int_list.append(int(i))
    reversed_sorted = sorted(int_list)[::-1]
    for i in range(len(reversed_sorted)):
        answer += reversed_sorted[i] * math.pow(10, len(reversed_sorted)-(i+1))
    answer = int(answer)
    return answer

먼저 pow 매소드를 이용하기 위해 math를 import한다.

빈 배열 int_list를 선언해 두고, 주어진 숫자 n을 문자화하여 쪼갠 뒤, 다시 정수로 만들어 int_list에 넣는다. 이를 sorted 매소드와 슬라이싱을 이용해 내림차순으로 배치한다. 이를 통해 주어진 수의 각각의 자리의 수들을 내림차순으로 정리한 배열을 얻을 수 있다.

이 배열을 하나의 정수로 만들기 위해 다시 한 번 for문을 작성하는데, 각 수의 자릿수를 만들어주기 위해 배열의 모든 원소에 대해 각각 10의 거듭제곱을 곱한다.

 

 

3. 최대공약수와 최소공배수

def solution(n, m):
    answer = []
    if n > m:
        n, m = m, n
    for i in reversed(range(1, n+1)):
        if (m % i == 0) and (n % i == 0):
            answer.append(i)
            break
    answer.append(int(m*n/answer[0]))
    return answer

먼저 주어진 두 수 중 m을 더 큰 수로 설정한다.

이후 최대공약수를 찾기 위하여 for 반복문을 사용하여, 두 수 m과 n을 각각 1부터 n까지의 모든 자연수로 나누어 떨어지는지를 확인하고, 모두 나누어 떨어지는 경우에 answer 배열에 넣는다. 횟수를 줄이기 위하여 1부터 확인하지 않고 n부터 확인한 후 break를 이용하면 시간을 단축할 수 있다.

최소공배수는 두 수를 곱한 뒤 이를 최대공약수로 나눔으로써 구할 수 있다.

 

관련글 더보기

댓글 영역