본문 바로가기

Develop/Coding Test

코딩테스트 입문 (feat. Day 14 문자열, 배열, 사칙연산, 수학, 조건문)

14일차 스탬프

1.  가까운 수

Q. 정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요. (가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.)

func solution(_ array:[Int], _ n:Int) -> Int {
    var result: Int = 0
    var minValue: Int = 100
    array.forEach {
        let gap = abs($0 - n)
        if minValue > gap {
            minValue = gap
            result = $0
        } else if minValue == gap {
            result = result > $0 ? $0 : result
        }
    }
    return  result
}

 

A. 전달 받은 array를 순회하면서 abs() 활용해 원소와 n의 간격을 구하고,

구한 간격이 최소값 minValue보다 작으면 minValue를 gap으로 교체한 후 result에는 현재 원소를 저장한다.

그리고 minValue와 gap이 동일하고 result가 현재 원소보다 크면

result에 현재 원소를 작으면 result를 저장하는 과정을 반복한 후, result를 반환하여 해결했다.

 

feat.

func solution(_ array:[Int], _ n:Int) -> Int {
    return array.min(by: { (abs($0 - n), $0) < (abs($1 - n), $1) })!
}

 

min과 튜플을 활용해 획기적으로 코드를 작성한 풀이를 보았는데,

min의 다음과 같은 기능으로 인해 가능한 코드인 것 같다.

min(by:)

위 코드는 어떻게 동작하는지 해석해보면,

튜플의 첫 번째 값에서 n와 원소의 간격을 저장하고 튜플의 두 번째 값에서 원소를 저장한 후,

두 튜플을 비교해서 튜플의 저장된 간격이 작은 튜플을 반환,

튜플에 저장된 두 간격이 동일한 경우 두 튜플에 저장된 원소를 비교해서 작은 원소를 지닌 튜플을 반환하는 동작을 한다.

2. 369게임

Q. 문제 설명 머쓱이는 친구들과 369게임을 하고 있습니다. 369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때, 머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.

func solution(_ order:Int) -> Int {
    return String(order).filter { ["3", "6", "9"].contains($0) }.count
}

 

A. 전달 받은 order를 String으로 변환한 후, 고차함수 filter로 순회하며 3, 6, 9에 포함되면 반환한 후

해당 배열의 길이를 반환하여 해결했다.

3. 암호 해독

Q. 군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다. 암호화된 문자열 cipher를 주고받습니다. 그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다. 문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.

func solution(_ cipher:String, _ code:Int) -> String {
    var result = ""
    var stringArray = cipher.map {$0}
    for index in 1...cipher.count {
        if index % code == 0 {
            result.append(stringArray[index - 1])
        }
    }
    return result
}

 

A. 전달 받은 cipher를 배열로 저장한 후, 1부터 해당 배열의 길이까지 순회하면서

index를 code로 나눴을 때 나머지가 0인 경우 result에 해당 원소를 추가한 후, 반환하여 해결했다.

4. 대문자와 소문자

Q. 문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.

func solution(_ my_string:String) -> String {
    return my_string.map { $0.isUppercase ? $0.lowercased() : $0.uppercased() }.joined()
}

 

A. 전달 받은 my_string을 고차함수 map으로 순회하며 isUppercase를 활용해

대문자인 경우 소문자로 바꾸고 아닌 경우 대문자로 바꾼 후

해당 배열을 joined()를 통해 string으로 변환한 후 반환하여 해결했다.


어제 글은 못썼지만 문제는 풀었기에

어제 푼 문제에 대한 풀이를 오늘 올리게 되었다.

오늘 푼 문제는 내일 올리게 될 것 같다ㅎ

내일도 화이팅!