본문 바로가기

Develop/Coding Test

코딩테스트 입문 (feat. Day 18 문자열, 수학, 조건문, 정렬)

18일차 스탬프

 

1.  문자열안에 문자열

Q. 문자열 str1, str2가 매개변수로 주어집니다. str1 안에 str2가 있다면 1을 없다면 2를 return하도록 solution 함수를 완성해주세요.

func solution(_ str1:String, _ str2:String) -> Int {
    return str1.contains(str2) ? 1 : 2
}

 

A. contains를 활용하여 전달 받은 str1에 str2이 포함되는지 판별한 후,

포함되면 1을 포함되지 않으면 2를 반환하여 해결했다.

2. 제곱수 판별하기

Q. 어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.

func solution(_ n:Int) -> Int {
    var result = 2
    for num in 1...n {
        if num * num == n {
            result = 1
            break
        }
    }
    return result
}

 

A. for문을 통해 1부터 전달 받은 n까지 순회하면서 해당하는 원소를 제곱했을때 n이면 result의 값을 1로 바꾼 후,

break를 통해 반복문을 탈출하고 result를 반환하여 해결했다.

 

feat.

func solution(_ n:Int) -> Int {
 let root = Int(sqrt(Double(n)))
    return root * root == n ? 1 : 2
}

 

다른 풀이를 보면서 sqrt()을 활용해 제곱근을 구한 후,

제곱근을 제곱했을 때 전달 받은 n이랑 일치하는지 판별하여 문제를 해결하는 풀이를 보고

sqrt()를 통해 제곱근을 구할 수 있다는 것을 알게 되었다...(다음엔 꼭 사용하자!)

3. 세균 증식

Q. 어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.

func solution(_ n:Int, _ t:Int) -> Int {
    var result: Int = n
    (1...t).forEach { _ in
        result *= 2
    }
    return result
}

 

A. 먼저 result에 n을 저장했다. 그리고 forEach문을 통해 1부터 전달 받은 t까지 순회하면서

result의 값에 2를 곱한 값을 저장한 후, result를 반환하여 해결했다.

 

feat.

func solution(_ n:Int, _ t:Int) -> Int {
    n*Int(pow(Float(2) , Float(t)))
}

 

다른 풀이를 보면서 pow()을 활용해 2의 거듭제곱을 구하고

그 값을 n에 곱해 문제를 해결하는 풀이를 보고

pow()를 통해 거듭제곱을 할 수 있다는 것을 알게 되었다...

4. 문자열 정렬하기 (2)

Q. 영어 대소문자로 이루어진 문자열 my_string이 매개변수로 주어질 때, my_string을 모두 소문자로 바꾸고 알파벳 순서대로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요.

func solution(_ my_string:String) -> String {
    return String(my_string.lowercased().sorted())
}

 

A. 전달 받은 my_string을 lowercased()를 통해 소문자로 바꾼 후,

sorted()를 활용해 알파벳 순서대로 정렬하여 반환된 값을 String으로 변환하여 해결했다.


이번에 sqrt(), pow()와 같이 기본적인 수학 개념에서 사용되는

메서드들을 새롭게 알게 되었는데, 위 메서드들을 모른 상태에서

문제를 해결하려다보니 풀이로 작성한 코드가 효율적이지 못했던 것 같다.

그래도 새로운 메서드들도 알게 되었으니 다음번에 사용할 수 있는 상황이 온다면

꼭 사용해서 문제를 조금 더 효율적으로 해결해보면 좋을 것 같다.

내일도 화이팅!