본문 바로가기

Develop/Coding Test

코딩 테스트 입문 (feat. Day 5 수학, 배열)

5일차 스탬프

1.  옷가게 할인 받기

Q. 머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다. 구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.

func solution(_ price:Int) -> Int {
    var sale: Double = 1
    if price >= 500000 {
        sale = 0.8
    } else if price >= 300000 {
        sale = 0.9
    } else if price >= 100000 {
        sale = 0.95
    }
    return Int(Double(price) * sale)
}

 

A. 조건문을 활용해서 가격을 50만 원, 30만 원, 10만 원 순으로 비교해서 지불해야 할 금액을 구하기 위한 할인율을 저장한 후 가격과 구한 값을 통해 지불해야 할 금액을 반환하여 해결했다.

2. 아이스 아메리카노

Q. 머쓱이는 추운 날에도 아이스 아메리카노만 마십니다. 아이스 아메리카노는 한잔에 5,500원입니다. 머쓱이가 가지고 있는 돈 money가 매개변수로 주어질 때, 머쓱이가 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈을 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

func solution(_ money:Int) -> [Int] {
    return [money / 5500, money % 5500]
}

 

A. 배열의 첫번째 원소에는 전달 받은 돈을 아메리카노 한 잔 가격인 5,500원으로 나눈 후 나온 몫을, 두번째 원소에는 나온 나머지를 저장한 후 반환하여 해결했다.

3. 나이 출력

Q. 머쓱이는 선생님이 몇 년도에 태어났는지 궁금해졌습니다. 2022년 기준 선생님의 나이 age가 주어질 때, 선생님의 출생 연도를 return 하는 solution 함수를 완성해주세요

func solution(_ age:Int) -> Int {
    return 2022 - age + 1
}

 

A. 2022년 기준으로 전달 받은 age를 뺀 값에 1을 더한 값을 반환하여 해결했다.

 

feat.

문제 해결 후, 2022가 아닌 1을 더한 2023에 age를 뺀다면

더 짧은 코드로 문제를 해결 할 수 있다는 것을 깨달았다.

4. 배열 뒤집기

Q. 정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.

func solution(_ num_list:[Int]) -> [Int] {
    return num_list.enumerated().map { index, _ in
        num_list[num_list.count - index - 1]
    }
}

 

A. 전달 받은 num_list를 enumerated()와 고차함수 map을 활용하여 index를 가지고 배열을 순회하면서

배열의 길이에 index - 1 을 뺀 값들을 새로운 배열로 반환하여 해결했다.

 

feat.

해결 후 다른 풀이를 보며

swift에 reverse()와 reversed() 메서드가 존재한다는 것을 알게 되었다.

func solution(_ num_list:[Int]) -> [Int] {
    return num_list.reversed()
}

 

해당 메서드를 사용한다면, 위와 같이 매우 간단하게 문제를 해결할 수 있다.

위 사항을 알게되면서 궁금점이 하나 생겼는데, 

'reverse() 와 reversed() 의 차이점은 무엇일까?' 라는 생각이 들었다.

알아본 결과, mutating에 따른 Complexity(복잡성)에서 차이가 존재한다.

 

mutating func reverse()  /  O(n)

func reversed() -> ReversedCollection<Self>  /  O(1)

 

위와 같이 두 메서드는 mutating의 유무로 인해

값을 변경하냐 혹은 주소를 변경하냐에서 차이점이 발생하고

이로 인해 복잡성이 다르게 나타나는 것을 알 수 있었다. 


오늘은 문제가 어렵진 않았고,

다른 사람들의 풀이를 보면서 부족한 지식을 쌓을 수 있어서

의미있는 시간이 되었던 것 같다.

Swift를 벌써 1년이나 사용했지만 실무로 배운 부분이 많다보니

아직 문법적으로는 공부가 많이 필요한 것 같다..

내일도 화이팅!