관리 메뉴

솜씨좋은장씨

[Programmers] 약수 구하기 (Python) (feat.ChatGPT) 본문

Programming/코딩 1일 1문제

[Programmers] 약수 구하기 (Python) (feat.ChatGPT)

솜씨좋은장씨 2023. 4. 8. 23:48
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 프로그래머스의 약수 구하기 입니다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

👨🏻‍💻 문제 풀이 - SOMJANG

1부터 n을 2로 나눈 값 까지 반복문을 돌면서 가져온 다음

n 을 해당 값으로 나웠을때 0이 되면 약수를 담는 리스트에 append 하고 

마지막으로 이를 오름차순으로 정렬한 값을 정답으로 하였습니다.

( 쓰면서 보니 정렬하지 않아도 이미 정렬되어있는데 왜 정렬을 하려고했지? 라는 생각이 들었습니다. )

👨🏻‍💻 코드 (Solution) - SOMJANG

def solution(n):
    answer = []
    
    for num in range(1, (n // 2) + 1):
        if n % num == 0:
            answer.append(num)
            
    answer.append(n)
    return sorted(answer)

👨🏻‍💻 문제 풀이 - ChatGPT - 1회차 - 그냥 풀어줘

아래의 코드는 주어진 정수 n의 약수를 구하는 함수입니다. 1부터 n까지 반복문을 돌면서 n을 현재 수로 나눈 나머지가 0이 되는 수는 n의 약수이므로 이를 리스트에 추가하고, 마지막에 리스트를 반환합니다.

예를 들어, n이 24인 경우, 1부터 24까지의 모든 수를 검사하면서 24를 현재 수로 나눈 나머지가 0인 경우에 해당 수를 리스트에 추가하게 됩니다. 따라서 최종적으로 [1, 2, 3, 4, 6, 8, 12, 24]가 반환됩니다.

👨🏻‍💻 코드 (Solution) - ChatGPT - 1회차 - 그냥 풀어줘

def solution(n):
    divisors = []
    for i in range(1, n+1):
        if n % i == 0:
            divisors.append(i)
    return divisors

👨🏻‍💻 문제 풀이 - ChatGPT - 2회차 - 더 성능 좋은 코드 부탁해

물론입니다! 아래는 약수를 구하는 더 효율적인 방법 중 하나인 제곱근을 이용한 코드입니다.

아래 코드에서는 1부터 n의 제곱근까지 반복문을 돌면서 n을 현재 수로 나눈 나머지가 0인 경우, 현재 수와 n/현재 수를 리스트에 추가합니다. 이때, 현재 수가 n의 제곱근일 경우에는 중복되므로 하나만 추가하도록 합니다.

마지막으로, 반환되는 리스트를 오름차순으로 정렬하여 출력하게 됩니다.

이 방법은 n이 클수록 더 효율적입니다. 하지만 range 함수와 int 함수, sqrt 함수를 호출해야 하기 때문에 상수 시간이 증가할 수 있으니, 상황에 맞게 선택하시면 됩니다.

👨🏻‍💻 코드 (Solution) - ChatGPT - 2회차 - 더 성능 좋은 코드 부탁해

import math

def solution(n):
    divisors = []
    for i in range(1, int(math.sqrt(n))+1):
        if n % i == 0:
            divisors.append(i)
            if i != n // i: # 제곱수가 아니면 n/i도 약수
                divisors.append(n // i)
    return sorted(divisors)

사실 지금까지 ChatGPT 에게 더 효율이 좋은 코드로 풀어달라고 했을때 

딱히 더 좋은 코드를 주지 않아서 조금 아쉬웠었는데

이번에는 확실히 반복문이 도는 회수를 줄여서 더 좋은 코드를 만들어준 것 같아

마음에 들었습니다.

 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments