풀이 과정
해당 문제는 모든 명함의 가로 세로를 담은 2차원 배열 sizes를 입력받고 해당 명함이 다 들어갈 수 있는 사이즈의 지갑 넓이는 구하는 문제였다. 명함의 가로 세로를 돌려서 넣을 수 있으므로 한 명함의 가로 세로 중 긴 면과 짧은 면을 따로 저장 후 그 중 가장 큰 수들을 가로와 세로로 삼으면 되겠다고 생각했다.
해결 코드
class Solution {
fun solution(sizes: Array<IntArray>): Int {
var bigArray = ArrayList<Int>()
var smallArray = ArrayList<Int>()
for (i in sizes){
if(i[0] > i[1]){
bigArray.add(i[0])
smallArray.add(i[1])
}
else
{
smallArray.add(i[0])
bigArray.add(i[1])
}
}
return bigArray.maxOf{it} * smallArray.maxOf{it}
}
}
해설
우선 각 명함의 긴 면과 짧은 면을 저장 할 배열을 두개 만든 후 반복문과 조건믄을 통해 sizes배열의 각 요소마다 긴 쪽은 bigArray에 짧은 쪽은 smallArray에 저장되도록 하였다. 그 후 maxOf{it}을 사용하여 각 배열의 가장 큰 수를 구하고 곱하여 리턴하였다.
리뷰
해당 문제를 어떻게 해결할지는 금방 생각해냈지만 마지막 각 배열의 가장 큰 수를 구하는 부분에서 시간이 좀 걸렸다. 처음에는 max() 와 maxOfNull()을 사용했지만 둘 다 코드가 실행되지 않아 Array가 아닌 List로도 바꿔보고 좀 헤맸다.
maxOf{it}을 사용하니 해당 에러는 뜨지 않고 잘 실행되었다.
'Android > Algorithm' 카테고리의 다른 글
[프로그래머스 / Kotlin] 콜라츠 추측 (0) | 2024.03.06 |
---|---|
[프로그래머스 / kotlin] 두 정수 사이의 합 (0) | 2024.03.06 |
[프로그래머스 / Kotlin] 하샤드 수 (1) | 2024.03.05 |
[프로그래머스 / Kotlin] 시저 암호 (1) | 2024.02.29 |
[kotlin] 크기가 작은 부분 문자열 (0) | 2024.02.26 |