코딩 기록들

[프로그래머스 코딩테스트 입문] - [최댓값만들기, 팩토리얼] 본문

카테고리 없음

[프로그래머스 코딩테스트 입문] - [최댓값만들기, 팩토리얼]

코딩펭귄 2023. 9. 21. 19:14

최댓값 만들기 (1)

문제 설명
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
제한사항
0 ≤ numbers의 원소 ≤ 10,000
2 ≤ numbers의 길이 ≤ 100
입출력 예
numbers           result
[1, 2, 3, 4, 5]       20     ->  두 수의 곱중 최댓값은 4 * 5 = 20 입니다.

코드

def solution(numbers):
    numbers.sort()
    return numbers[-1] * numbers[-2]

* sort()    vs   sorted()  *

- sort() - 리스트명.sort( ) 형식으로 "리스트형의 메소드"​​이며 리스트 원본값을 직접 수정-> 리턴값 없음(None)

- sort(reverse=True) - 리스트를 내림차순으로 정렬

- sorted() -  sorted( 리스트명 ) 형식으로 "내장 함수"이며 리스트 원본 값은 그대로이고 정렬 값을 반환

 

리스트참고https://beaholic.tistory.com/19

 

팩토리얼

문제 설명
i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요. (i! ≤ n)
제한사항
0 < n ≤ 3,628,800
입출력 예
      n           result
3628800       10   -> 10! = 3,628,800입니다. n이 3628800이므로 최대 팩토리얼인 10을 return 합니다.
코드

1) for문사용 - 실행시간 초과

def facto(a):
    i = 1
    for j in range(1,a+1):
        i *= j
    return i
    
def solution(n):
    answer = 0 
    for i in range(1,n):
        if facto(i) > n:
            answer = i
    return answer
    
    -> 실행 시간이 10.0초를 초과하여 실행이 중단되었습니다. 실행 시간이 더 짧은 다른 방법을 찾아보세요.

2) for문 사용(나누기)

 ?

 

3) while문 사용

    def solution(n):
    i = 0 
    fac = 1
    while n >= fac:
        i += 1
        fac = fac*i
    answer = i-1   
    return answer