안녕하세요. 이번에는 프로그래머스 최소직사각형 문제를 풀어보려고 합니다.
Problem
명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로길이와 세로 길이를 조사했습니다.
아래 표는 4가지 명함의 가로길이와 세로 길이를 나타냅니다.
명함 번호 | 가로 길이 | 세로 길이 |
1 | 60 | 50 |
2 | 30 | 70 |
3 | 60 | 40 |
4 | 80 | 30 |
가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다.
모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해 주세요.
[제한 사항]
○ sizes의 길이는 1 이상 10,000 이하입니다.
- sizes의 원소는 [w, h] 형식입니다.
- w는 명함의 가로 길이를 나타냅니다.
- h는 명함의 세로 길이를 나타냅니다.
- w와 h는 1 이상 1,000 이하인 자연수입니다.
Solution
import kotlin.math.max
class Solution {
fun solution(sizes: Array<IntArray>): Int {
var answer: Int = 0
var wMax: Int = Int.MIN_VALUE
var hMax: Int = Int.MIN_VALUE
for(i in sizes) {
if(i[0] > i[1]) {
wMax = max(wMax, i[0])
hMax = max(hMax, i[1])
} else {
wMax = max(wMax, i[1])
hMax = max(hMax, i[0])
}
}
return wMax * hMax
}
}
이번 문제는 최소 직사각형으로 알아보기 위해서 가로와 세로의 값을 큰 곳으로 맞추기 위해서 for 문안에 if 문으로 가로와 세로 중 큰 곳을 통해서 구할 수 있도록 구성하였습니다.
1. 다른 사람 코드
class Solution {
fun solution(sizes: Array<IntArray>): Int {
return sizes.map{ it.maxOrNull()!! }.maxOrNull()!! * sizes.map{ it.minOrNull()!! }.maxOrNull()!!
}
}
저의 코드와 다르게 1줄로 푼 풀이가 있어서 공부용으로 가져와봤습니다. map을 통해 원소의 가장 큰 값들 중에 가장 큰 값과 원소의 작은 값들 중에 가장 큰 값을 곱하는 방식으로 접근한 방법입니다.
1. 원소 중 가장 큰 값들중에 가장 큰 값
sizes.map { it.maxOrNull()!! }.maxOrNull()!!
/** 이렇게 하면 처음 it.maxOrNull()
* 60 70 60 80으로 원소들의 가장 큰 값이 나오고
* 마지막 maxOrNull()에서 80이 나옵니다.
*/
2. 원소 중 가장 작은 값들중에 가장 큰 값
sizes.map { it.minOrNull()!! }.maxOrNull()!!
/** 이렇게 하면 처음 it.minOrNull()
* 50 30 30 40으로 원소들의 가장 큰 값이 나오고
* 마지막 maxOrNull()에서 50이 나옵니다.
*/
이렇게 map을 통해서 한줄로 가독성이 좋게 풀이할 수도 있습니다.
Performance
1. 내가 작성한 코드 | 2. 다른 사람 코드 |
'프로그래머스 Algorithm' 카테고리의 다른 글
[프로그래머스] 숫자 문자열과 영단어 Kotlin (0) | 2023.12.12 |
---|---|
[프로그래머스] 카펫 Kotlin (0) | 2023.12.11 |
[프로그래머스] 시저 암호 Kotlin (0) | 2023.12.09 |
[프로그래머스] 피보나치 수 Kotlin (2) | 2023.12.08 |
[프로그래머스] 삼총사 Kotlin (0) | 2023.12.07 |