본문 바로가기

Develop/Coding Test

코딩 테스트 입문 (feat. Day 7 문자열, 조건문, 수학, 반복문)

7일차 스탬프

1.  특정 문자 제거하기

Q. 문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

func solution(_ my_string:String, _ letter:String) -> String {
    return my_string.replacingOccurrences(of: letter, with: "")
}

 

A. 전달 받은 my_string에서 replacingOccurrences(of:with:)를 활용하여 전달 받은 letter를 제거한 문자열을 반환하여 해결했다.

 

feat.

func solution(_ my_string:String, _ letter:String) -> String {
    return my_string.filter{String($0) != letter}
}

 

만약 replacingOccurrences(of:with:) 메서드가 기억나지 않는다면,

위 코드처럼 고차함수 filter를 이용해서 문제를 해결하는 방법도 있다!

2. 각도기

Q. 각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.

func solution(_ angle:Int) -> Int {
    if angle < 90 {
        return 1
    } else if angle > 90 && angle < 180 {
        return 3
    }
    return angle / 45
}

 

A. 전달 받은 angle을 먼저 조건문을 통해 예각과 둔각인 경우일 때의 값을 반환한 후,

조건문에서 처리되지 않은 경우에는 angle에 45를 나눴을 때의 몫을 반환하여 해결했다.

3. 양꼬치

Q. 머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.

func solution(_ n:Int, _ k:Int) -> Int {
    let freeDrink = n / 10
    return n * 12000 + (k - freeDrink) * 2000
}

 

A. 먼저 먹은 양꼬치의 양을 10으로 나누어 무료 음료수의 개수를 구하고,

먹은양꼬치의 가격과 먹은 음료수에서 무료 음료수의 개수를 뺀 음료수의 가격을 더한 값을 반환하여 해결했다.

4. 짝수의 합

Q. 정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요. (0 < n ≤ 1000)

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

 

A. for문을 통해 1부터 전달 받은 n까지를 순회하며 조건문을 통해 짝수인 경우에 result에 값을 더해준 후, result를 반환하여 해결했다.

 

feat.

코드를 작성하고 제출 후 채점하기를 실행했는데 자꾸 하나의 케이스에서 signal: illegal instruction (core dumped) 에러가 발생했다.

에러...

아무리 봐도 정답이 나오는 코드여서 헤매다가 해결하게 되었는데 이유는 다음과 같다.

 

for문을 한 번이라도 덜 실행하기 위해 1은 짝수가 아니므로 바로 2부터 n까지 순회하도록 작성했는데

문제의 조건에 파라미터 n의 조건이 (0 < n ≤ 1000) 이렇게 주어졌었다..

그래서 n에 1이 전달되었을 때 2...1 의 조건으로 반복문이 실행되어서

Range requires lowerBound <= upperBound 에러가 발생했던 것이다.

항상 입력 조건은 잘 보지 않고 넘어갔는데, 앞으로는 꼭 확인하는 습관을 길러야겠다!


오늘은 예상치 못한 케이스에서 에러가 발생해서 시간이 조금 걸렸지만,

그래도 문제를 해결할 때, 입력 조건을 한 번씩은 꼭 확인해야한다는 사실을 알았기 때문에 의미있는 시간이었다.

내일도 화이팅!