[Kotlin] ์ตœ์†Œ์ง์‚ฌ๊ฐํ˜• (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜) : maxOf()
๋ฐ˜์‘ํ˜•

 

๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/86491

 


 

์ ‘๊ทผ

 

  • 1. ๋ฐฐ์—ด ์† ์›์†Œ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ๊ณฑํ•œ๋’ค ์ œ์ผ ํฐ ๊ฐ’์„ ์ฐพ์Œ
    2. ๊ฐ ์›์†Œ์˜ ์ž‘์€ ๊ฐ€๋กœ๊ธธ์ด, ์ž‘์€ ์„ธ๋กœ๊ธธ์ด๋ถ€ํ„ฐ ์„œ๋กœ ๊ณฑํ•ด์„œ 1์˜ ๊ฐ’์„ ์ถฉ์กฑํ•˜๋Š” ๊ฒƒ์„ ์ฐพ์Œ (์ด์ค‘ ์กฐ๊ฑด๋ฌธ)
  • ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€๋ฉด ๋˜์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ–ˆ๋‹ค. ์•„๋ž˜๋Š” ํ•ด๋‹น ์ƒ๊ฐ์— ๋Œ€ํ•œ ์ˆ˜๋„์ฝ”๋“œ๋‹ค.
class Solution {
    fun solution(sizes: Array<IntArray>): Int {
        val sizes = sizes
        sizes.map {it.first * it.second} . maxOrNull๊ฐ’์ฐพ๊ธฐ
        minwidth = 
        minheight =
        for(minwidth ~){
            for(maxwidth ~)
        }
    }
}
  • ๊ทธ๋Ÿฌ๋‚˜ map์€ ๊ธฐ์กด ์ปฌ๋ ‰์…˜์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ๋žŒ๋‹ค ํ•จ์ˆ˜๊ฐ€ ์ ์šฉ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์€ ์ƒˆ๋กœ์šด ์ปฌ๋ ‰์…˜์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ์ฝ”๋“œ์— ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค.
  • ๋˜ํ•œ 2๋ฒˆ์ฒ˜๋Ÿผ ์ด์ค‘ ์กฐ๊ฑด๋ฌธ์„ ์ด์šฉํ•ด์„œ ํ‘ธ๋Š” ๊ฑด, ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด์„ ๋ฐ˜๋ณตํ•˜์—ฌ ํ‘ธ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ตฌํ˜„ํ•˜๋”๋ผ๋„ ํšจ์œจ์ ์ด์ง€ ์•Š๋‹ค.

 

์„ฑ๊ณต ์ฝ”๋“œ

class Solution {
    fun solution(sizes: Array<IntArray>): Int {
        // ์ตœ๋Œ€ ๊ฐ€๋กœ ๊ธธ์ด์™€ ์ตœ๋Œ€ ์„ธ๋กœ ๊ธธ์ด๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜ ์„ ์–ธ
        var maxWidth = 0
        var maxHeight = 0
        
        // ๊ฐ ๋ช…ํ•จ์˜ ๊ฐ€๋กœ ๊ธธ์ด์™€ ์„ธ๋กœ ๊ธธ์ด๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ตœ๋Œ€๊ฐ’ ๊ฐฑ์‹ 
        for (size in sizes) {
            maxWidth = maxOf(maxWidth, maxOf(size[0], size[1]))
            maxHeight = maxOf(maxHeight, minOf(size[0], size[1]))
        }
        
        // ์ตœ๋Œ€ ๊ฐ€๋กœ ๊ธธ์ด์™€ ์ตœ๋Œ€ ์„ธ๋กœ ๊ธธ์ด๋ฅผ ๊ณฑํ•˜์—ฌ ์ตœ์ข… ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
        return maxWidth * maxHeight
    }
}

 


 

์„ค๋ช…

 

  1. var maxWidth = 0
    var maxHeight = 0
    ์ตœ๋Œ€ ๊ธธ์ด์™€ ์ตœ์†Œ ๊ธธ์ด๋ฅผ ์ง€์ •ํ•  ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ๋‹ค.
    ์—ฌ๊ธฐ์„  ์ž„์˜๋กœ ์ตœ๋Œ€๊ธธ์ด๋ฅผ maxWidth, ์ตœ์†Œ๊ธธ์ด๋ฅผ maxHeight๋ผ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅํ•  ์˜ˆ์ •์ด๋‹ค.
    ๊ฐ€๋กœ์™€ ์„ธ๋กœ์— ์ง‘์ฐฉํ•˜์ง€ ์•Š๊ณ , ๊ทธ๋ƒฅ ์ตœ์†Ÿ๊ฐ’ * ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋ชจ๋“  ๋ช…ํ•จ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ง€๊ฐ‘ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. for (size in sizes) {
        maxWidth = maxOf(maxWidth, maxOf(size[0], size[1]))
        maxHeight = maxOf(maxHeight, minOf(size[0], size[1]))
    }
    sizes์— ์žˆ๋Š” ๊ฐ ์›์†Œ๋ฅผ ๊บผ๋‚ด๋ฉด์„œ, ๊ทธ ์›์†Œ์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ์™€ ๋‘๋ฒˆ์งธ ์›์†Œ ์ค‘ ํฐ ๊ฐ’์€ maxWidth, ์ž‘์€ ๊ฐ’์€ maxHeight์— ์ €์žฅํ•œ๋‹ค. ์–ด์จŒ๋“  ๋ชจ๋“  ๋ช…ํ•จ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ด์ฆˆ๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ, sizes์˜ ๊ฐ ์›์†Œ๋ฅผ ๊บผ๋‚ด๋ฉด์„œ ๊ธฐ์กด ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ ๋” ํฐ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด maxOf(๋น„๊ต๊ฐ’, ๋น„๊ต๊ฐ’)์„ ์‚ฌ์šฉํ•œ๋‹ค.
  3. return maxWidth * maxHeight
    ์•„๊นŒ for๋ฌธ์œผ๋กœ ๊ตฌํ•œ maxWidth์™€ maxHeight๋ฅผ ๊ณฑํ•ด์ฃผ์–ด ๋ฆฌํ„ดํ•œ๋‹ค.

 

 

๐Ÿ’กmax๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  maxOf๋ฅผ ์“ด ์ด์œ 

val result = a.max(b) // ๋ฌด์กฐ๊ฑด 2๊ฐœ๋งŒ ๋น„๊ต ๊ฐ€๋Šฅ, Null ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€
val result = maxOf(a, b, c) // Null์ฒ˜๋ฆฌ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’
  • ๋‘˜ ๋‹ค ์ฃผ์–ด์ง„ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋” ํฐ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ์•ฝ๊ฐ„ ๋‹ค๋ฅด๋‹ค.
  • max ํ•จ์ˆ˜๋Š” ๋‘ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๊ฐ€ null์ผ ๊ฒฝ์šฐ์—๋„ ์ž‘๋™ํ•˜์ง€๋งŒ,
    maxOf ํ•จ์ˆ˜๋Š” null ๊ฐ’์„ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ๋‘ ๊ฐœ ์ด์ƒ์˜ ๊ฐ’์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค.
  • max๋Š” Null ๊ฐ€๋Šฅ์„ฑ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Null๊ฐ’์ด ๋“ค์–ด๊ฐ€๋ฉด ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
    maxOf๋Š” Null์„ ์ œ์™ธํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 


 

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

 

import kotlin.math.max
import kotlin.math.min

class Solution {
    fun solution(sizes: Array<IntArray>): Int {
        val widths = mutableListOf<Int>()
        val heights = mutableListOf<Int>()

        sizes.forEach {
            widths.add(max(it[0], it[1]))
            heights.add(min(it[0], it[1]))
        }

        return widths.max()!! * heights.max()!!
    }
}
  • width์™€ height๋ฅผ ๊ฐ๊ฐ ๋ฐฐ์—ด๋กœ ์„ ์–ธํ•˜๊ณ  ๊ทธ ๋ฐฐ์—ด์ค‘ ์ตœ๋Œ“๊ฐ’์„ ์„œ๋กœ ๊ณฑํ•œ ๊ฒƒ์ด๋‹ค. ๊ฐœ์ธ์ ์œผ๋ก  ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๋ฐฉ๋ฒ•์ด ๋‚˜์•„๋ณด์ด๋‚˜, ๋ฐฐ์—ด์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์“ธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

 

class Solution {
    fun solution(sizes: Array<IntArray>): Int
        = sizes.map{it.maxOrNull()!!}.maxOrNull()!!*sizes.map{it.minOrNull()!!}.maxOrNull()!!
}
  • ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ–ˆ๋˜ ๋ฐฉ๋ฒ•์„ map์„ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•œ ๋ฐฉ์‹์ด๋‹ค.
  • ์ฝ”๋“œ์˜ ๊ธธ์ด๋Š” ์งง์ง€๋งŒ, ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์ฝ”๋“œ์ธ์ง€๋Š” ์ƒ๊ฐํ•ด๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

 

๋ฐ˜์‘ํ˜•
 ๐Ÿ’ฌ C O M M E N T