https://school.programmers.co.kr/learn/courses/30/lessons/120847
문제
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return 하도록 solution 함수를 완성해 주세요.
제한사항
0 ≤ numbers의 원소 ≤ 10,000
2 ≤ numbers의 길이 ≤ 100
풀이
class Solution1() {
fun solution(numbers: IntArray): Int {
val arr = IntArray(10_001)
var max = 0
numbers.forEach {
if (it > max) max = it
arr[it]++
}
var before: Int? = null
for (i in 10_000 downTo 0) {
if (arr[i] > 0) {
if (before != null) return before * i
if (arr[i] == 1) {
before = i
} else {
return i * i
}
}
}
return 0
}
}
class Solution2 {
fun solution(numbers: IntArray): Int {
var first : Int
var second : Int
if (numbers[0] > numbers[1]){
first = numbers[0]
second = numbers[1]
}else {
first = numbers[1]
second = numbers[0]
}
for (i in 2 until numbers.size){
if (numbers[i] > second){
if (numbers[i] > first){
second = first
first = numbers[i]
}else{
second = numbers[i]
}
}
}
return first*second
}
}
- 해당문제를 2가지 방법을 이용하여 풀어보았습니다
- 1번 풀이같은 경우 배열을 이용하여 풀어보았고 2번 같은 경우 변수 2개를 이용하여 풀어보았습니다.
- 1번 같은 경우 범위만큼의 배열을 만들어 number를 돌면서 해당 값이 나올 때마다 해당 배열의 값을 1씩 증가시킨 후 범위가 담긴 배열의 최댓값부터 0까지 돌면서 값을 반환하는 방식입니다.
- 2번 같은 경우 배열의 0번과 1번 index의 값들을 대소 비교하여 first와 second를 알맞게 넣어줍니다. 이후 배열의 남은 부분들을 순환하여 남은 2개의 값을 곱해 반환해 주면 됩니다.
- 2개의 풀이는 각각 장점이 있는것같습니다. 원소의 범위가 작고 numbers의 길이가 길다면 1번 풀이가 좋을 것이고 그 반대의 경우에는 2번 풀이가 더 좋을 것입니다.
결과
'코틀린 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 중복된 문자 제거 (1) (Kotlin) (0) | 2023.07.26 |
---|---|
[프로그래머스] - 문자열 정렬하기 (1) (Kotlin) (0) | 2023.07.26 |
[프로그래머스] - 점의 위치 구하기 (Kotlin) (0) | 2023.07.25 |
[프로그래머스] - 가위 바위 보 (Kotlin) (0) | 2023.07.25 |
[프로그래머스] - 문자열 뒤집기 (Kotlin) (0) | 2023.07.25 |