본문 바로가기
코딩테스트

[프로그래머스] 최댓값 만들기(1)

by liz_devel 2025. 12. 19.

🗒 문제


📝 나의 문제풀이

class Solution {
    fun solution(numbers: IntArray): Int {
        numbers.sort()
        return numbers[numbers.size - 1] * numbers[numbers.size - 2]
    }
}

 


📝 다른 사람의 문제 풀이

다른 사람의 문제 풀이는 좋아요 수가 높거나 많은 사람들이 푼 방법 기준으로 첨부하였습니다.

class Solution {
    fun solution(numbers: IntArray): Int  = numbers.sorted().takeLast(2).fold(1) { i, acc -> acc * i }
}

🖊 문제 풀이 시 알면 좋을 것

sort() — 배열 자체를 정렬

 
numbers.sort()

✔ 특징

  • 원본 배열이 바뀜
  • 반환값 없음 (Unit)
  • IntArray 전용

✔ 예시

 
val arr = intArrayOf(3, 1, 2)
arr.sort()
println(arr.toList()) // [1, 2, 3]

✔ 언제 쓰나?

  • 입력 배열을 직접 써도 될 때
  • 빠르고 단순
  • 코테에서 가장 많이 씀 ⭐

 sorted() — 새 리스트를 만들어서 정렬

numbers.sorted()
 
✔ 특징
  • 원본 유지
  • List<Int> 반환
  • 내부적으로 새 컬렉션 생성

✔ 예시

val arr = intArrayOf(3, 1, 2)
val sortedList = arr.sorted()

println(arr.toList())       // [3, 1, 2]
println(sortedList)         // [1, 2, 3]

🔥 sort() vs sorted() 차이 (중요)

 

구분 sort() sorted()
원본 변경 O X
반환값 없음 List
메모리 적음 더 사용
코테 추천 ⭐⭐⭐⭐ ⭐⭐

takeLast(n) — 뒤에서 n개 가져오기

list.takeLast(2)

✔ 설명

  • 리스트 마지막 2개 원소를 새로운 리스트로 반환

✔ 예시

 
listOf(1, 2, 3, 4, 5).takeLast(2)
// [4, 5]

 fold() — 값을 하나로 합치기

 
fold(초기값) { 누적값, 현재값 -> 계산 }

✔ 여기서 쓰인 코드

 
fold(1) { acc, i -> acc * i }

✔ 동작 과정

[4, 5]
초기값 = 1

1 * 4 = 4
4 * 5 = 20

👉 결과 20

 

fold 쉽게 이해하기

 

함수 의미
sum() 전부 더함
fold() 내가 원하는 방식으로 하나로 합침
반응형