Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 정렬
- GIT
- OCR
- MongoDB
- nestjs
- game
- Queue
- TypeScript
- Sequelize
- Express
- cookie
- JavaScript
- jest
- 자료구조
- Nest.js
- Python
- mongoose
- AWS
- 게임
- react
- MySQL
- nodejs
- Bull
- class
- 공룡게임
- flask
- Dinosaur
- typeORM
- dfs
Archives
- Today
- Total
포시코딩
[프로그래머스][Lv.0] 최댓값 만들기 (2) 본문
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/120862
내 풀이 A
def solution(numbers):
numbers.sort()
return numbers[-1]*numbers[-2]
간단한 문제인줄 알았는데 numbers의 범위를 생각하지 못했다.
- -10,000 ≤ numbers의 원소 ≤ 10,000
두 음수의 합도 제일 큰 수가 될 수 있다는걸 생각하지 못했기 때문에 이 방법은 바로 폐기
내 풀이 B
def solution(numbers):
max = numbers[0]*numbers[1] # 수정전에는 max = 0
numbers.sort()
for i in range(len(numbers)):
for j in range(i+1, len(numbers)):
if max < numbers[i]*numbers[j]:
max = numbers[i]*numbers[j]
return max
정렬하듯 두 수를 하나하나 곱해 최대값을 구했는데
max의 초기값을 0으로 지정한게 큰 실수였다.
numbers에서 두 수의 합이 0보다 작은 경우도 있다는걸 간과했기에
한참을 찾다 결국 다른 사람들의 도움을 받았다.
- 2 ≤ numbers 의 길이 ≤ 100
numbers의 길이는 2 이상이기에 0, 1 인덱스를 먼저 곱해 초기값을 정하게끔 변경하니 잘 되는것을 확인
다른 풀이
def solution(numbers):
numbers.sort()
return max(numbers[0] * numbers[1], numbers[-1] * numbers[-2])
마지막 두 수의 곱이 제일 큰 수가 아닌 경우는 두 음수의 곱이라는 얘기인데
정렬했을 때 처음 두 수가 제일 낮은 즉, 곱했을 때 제일 큰 수가 되므로
이 방법은 내 풀이처럼 이중for문도 쓰지 않기 때문에 아주 좋은 풀이 방법으로 보인다.
728x90
'자료구조알고리즘 > 문제풀이' 카테고리의 다른 글
[프로그래머스][Lv.0] 피자 나눠 먹기 (2) (0) | 2023.01.03 |
---|---|
[프로그래머스][Lv.0] 외계행성의 나이 (0) | 2023.01.03 |
[프로그래머스][Lv.0] 가위 바위 보 (0) | 2023.01.02 |
[프로그래머스][Lv.0] 암호 해독 (0) | 2022.12.31 |
[프로그래머스][Lv.0] 개미 군단 (0) | 2022.12.31 |