Algorithm Problem Solving/Programmers

[프로그래머스] 최소직사각형, 나머지가 1이 되는 수 찾기, 부족한 금액 계산하기 with Swift

코코자장자장 2021. 12. 3. 10:57

안녕하세요! 오늘은 최소직사각형, 나머지가 1이 되는 수 찾기, 부족한 금액 계산하기 문제를 풀어보았습니다.

오늘부터는 요즘 공부하고 있는 Swift를 이용해서 문제를 풀 예정입니다!

 

 

1. 최소직사각형

 

    최소직사각형 문제는 직사각형 안에 카드를 모두 넣을수 있는 카드지갑의 크기를 구하는 문제입니다!

 

    카드지갑 모양이 width가 길고 height가 짧도록 한다고 생각하고

    

    주어진 카드의 긴 부분이 maxWidth와 비교해서 가장 길면 maxWidth를 초기화해주는 것을 반복하고

 

    짧은 부분이 maxHeight와 비교해서 가장 길면 maxHeight를 초기화해주는 것을 반복해

 

    width와 height를 결정하고 곱한 것을 return 해주면 됩니다.

 

import Foundation

func solution(_ sizes:[[Int]]) -> Int {
    var maxWidth = 0
    var maxHeight = 0
    var count = sizes.count
    
    for x in 0..<count {
        var long = sizes[x][0] > sizes[x][1] ? sizes[x][0] : sizes[x][1]
        var short = sizes[x][0] > sizes[x][1] ? sizes[x][1] : sizes[x][0]
        if maxWidth < long {
            maxWidth = long
        }
        if maxHeight < short {
            maxHeight = short
        }
    }
    return maxWidth * maxHeight
}

 

 

2. 나머지가 1이 되는 수 찾기

 

    이 문제는 나머지가 1이 되는 수 중에 가장 작은 수를 반환하면 되는 문제입니다.

 

    주어지는 n이 3보다 크니 못해도 return값은 n-1보다 작거나 같겠죠?

 

    그래서 그냥 마지막 return에 n-1을 넣어줬지만 사실 저기까지 갈 일은 없습니다.

 

    for문에서 이미 return되기 때문이죠.

 

    1부터 n까지 모듈로 해서 1이 나오면 그 값을 리턴해버리면 가장 작은 수를 return하기 때문에

 

    문제를 해결할 수 있습니다.

import Foundation

func solution(_ n:Int) -> Int {
    for i in 1...n {
        if n % i == 1{
            return i
        }
    }
    return n-1
}

 

 

3. 부족한 금액 계산하기

 

    이 문제는 초등학생인지 중학생인지 모르지만 학창시절 배웠던 등차수열이 생각나게 하더라구요!

 

    문제를 풀다 보니 어? 하고 떠올라서 다시 풀어보니 맞아서 아직 수학에 대한 감이 죽지 않았구나 싶었습니다.

 

    원래는 for문을 이용해 문제를 풀 수 있지만 count횟수만큼 여러번하기 때문에 차라리 등차수열로 한방에 푸는게 좋겠더라구요!

 

    그리고 결과가 양수일경우 0을 반환하고 음수일경우 -answer을 반환하여 문제를 해결하였습니다.

 

import Foundation

func solution(_ price:Int, _ money:Int, _ count:Int) -> Int64{
    
    var answer:Int64 = Int64(money - price * count * (count + 1) / 2)
    
    /* it takes long time, no recommanded */
    //var answer:Int64 = 0
    //for i in 1...count {
    //    answer -= Int64(i) * Int64(price)
    //}
    
    //answer = Int64(money) + answer
    
    answer = answer < 0 ? -answer : 0
    
    return answer
}

 

오늘은 여기까지고 봐주셔서 감사합니다!

 

즐거운 하루 되세요!