스파르타 코딩 클럽 - iOS 스타터 6기/알고리즘 코드카타

7. 스파르타 코딩 클럽 - 3월 19일 코딩테스트 연습 (코드카타)

seongpil Heo 2025. 3. 19. 10:57

 ❓ 오늘의 문제

1. 머쓱이보다 키 큰 사람

  • 머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 return 하도록 solution 함수를 완성해 보세요.

머쓱이보다 키 큰 사람

나의 정답 코드

import Foundation

func solution(_ array:[Int], _ height:Int) -> Int {
    var result = 0
    for i in array {
        if i > height {
            result += 1
        }
    }
    return result
}

 

2. 점의 위치 구하기

  • 사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를 매깁니다.
    • x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
    • x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
    • x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
    • x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.
  • x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해 주세요.

점의 위치 구하기

나의 정답 코드

import Foundation

func solution(_ dot:[Int]) -> Int {
    if dot[0] > 0 && dot[1] > 0 {
        return 1
    } else if dot[0] < 0 && dot[1] > 0 {
        return 2
    }else if dot[0] < 0 && dot[1] < 0 {
        return 3
    }
    return 4
}

 

3. 가까운 수

  • 정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해 주세요.

[ 실패 ]

처음 코드

나의 정답 코드 1

import Foundation

func solution(_ array:[Int], _ n:Int) -> Int {
    var result = array[0]
    // 절댓값 확인하기 (abs함수 사용)
    for num in array {
        if abs(num - n) < abs(result - n) { 
            result = num
        }
    }
    return result
}

 

[ 성공 ]

나의 정답 코드 2

import Foundation

func solution(_ array:[Int], _ n:Int) -> Int {
    var result = array[0]
    // 절댓값 확인하기 (abs함수 사용)
    for num in array {
        if abs(num - n) < abs(result - n) || abs(num - n) == abs(result - n) && num < result { 
            result = num
        }
    }
    return result
}

 ✓ TIL

오늘은 3문제를 풀었는데 그중 기억에 남는 문제는 3번 가까운 수 문제이다.

문제를 읽어보면 배열과 정수 n이 주어지는데 배열에 들어있는 정수 중 n과 가장 가까운 수를 return 하는 함수를 만들면 되는 문제이다.

 

가까운 수를 구하기 위해서 절댓값을 이용하기로 했다.

구글에 Swift 절댓값 함수라고 검색하니 abs 함수가 나왔다.

내 친구 GPT한테 함수에 대해 설명해 달라고 했다.

 

abs함수는 괄호 안에 있는 변수의 절댓값을 반환하고, Int형, Double, Float 등 다양한 숫자 타입에서 사용할 수 있다.

 

다시 문제 3번으로 돌아가보면 return 할 변수 result를 선언하고 array[0]의 값으로 초기화했다.

var result = array[0]
for num in array {
        if abs(result - n) || abs(num - n) == abs(result - n) && num < result { 
            result = num
        }
    }

 

그다음 array의 배열을 for문을 돌리면서 num - n의 절댓값과 result - n의 절댓값을 비교한다.

 

예를 들어 array = [3, 10, 28]이고, n = 20일 때,

result는 array[0]인 3으로 초기화되고, for문에 들어간다.

처음 num이 3일 때 abs(num - n)abs(result - n)이 같고 num과 result가 같기 때문에 result = num 코드를 실행하지 않고

배열의 다음 원소로 넘어간다.

 

num이 10일 때, abs(num - n)= 10 이고,  abs(result - n) = 17 이다.

if 문의 첫 번째 조건인 abs(result - n) || abs(num - n)이 true이기 때문에

result = num을 수행하고, 현재 result에는 num의 값인 10이 들어가게 된다.

 

마지막으로 num이 28일 때,  abs(num - n)= 8 이고,  abs(result - n) = 10 이다.

마찬가지로 if 문의 첫 번째 조건인 abs(result - n) || abs(num - n)이 true이기 때문에

result = num을 수행하고, 현재 result에는 num의 값인 28이 들어가게 된다.

 

마지막에 return result 하기 때문에 return값은 28이 된다.

 

if문의 abs(num - n) == abs(result - n) && num < result 조건은 제한사항 중 가장 가까운 수가 여러 개일 경우

더 작은 수를 return 합니다.라는 조건을 판단하는데 절댓값이 같을 때 현재 num이 result보다 작을 때

true값을 리턴하며 if문 안에 있는 result = num을 수행한다.


 😼 GitHub

 

잔디를 한 땀 한 땀...