본문 바로가기
카테고리 없음

[TIL]24.03.06내일배움캠프 + 알고리즘 문제풀이, sort

by Byeong 2024. 3. 6.

알고리즘 문제를 풀기 시작했다. (어제 TIL 작성 까먹음)

 

기억에 남는 문제를 풀이를 작성해 본다.

 

최댓값 만들기

문제 설명

정수 배열 numbers가 매개변수로 주어집니다. 
numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

 

 

제한사항
0 ≤ numbers의 원소 ≤ 10,000
2 ≤ numbers의 길이 ≤ 100

 

 

입출력 예
numbers	result
[1, 2, 3, 4, 5]	 =  20
[0, 31, 24, 10, 1, 9]   = 	744


입출력 예 설명

두 수의 곱중 최댓값은 4 * 5 = 20 입니다.

두 수의 곱중 최댓값은 31 * 24 = 744 입니다.

 

문제의 내용처럼 정수의 배열을 주는 데 그중에서 곱한 값이 가장 큰 것을 구라 하라는 문제였다.

 

처음에는 가장 큰 수를 구해주고 두번 째로 큰수를 구해 곱하면 되겠다.라고 생각하여

배열의 최대 값을 구해 줬다. 

def solution(numbers):
    a = 0
    for i in numbers:
        if i > a:
            i = a

 

이런 식으로 문제를 풀다 두 번째 최대 값을 구하는 방법을 아무리 생각해도 나오지 않았다...

그래서 다시 생각한 방법은 배열을 정렬하면 가장 큰 수와 두 번째로 큰 수가 뒤로 마지막으로 간다는 방법을 이용했다.

 

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

 

. sort() 문을 이용한 방법인데 배열 안에 수를 정렬할 때 사용한다.

문제는 바로 print(numbers.sort())를 출력하면 none 값이 나오는데 리시트 자체를 변경해 주기 때문에 

numbers.sort()
print(numbers)

를 출력한다면 정렬된 배열을 볼 수 있다.

 

 

마무리 

점점 문제가 어려워져 시간이 많이 걸리고 있다. 그래도 차근차근 내용들을 이해하며 여러 방식으로 푸는 방법을 익혀 나가야겠다.