❓ 오늘의 문제
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
잔디를 한 땀 한 땀...
'스파르타 코딩 클럽 - iOS 스타터 6기 > 알고리즘 코드카타' 카테고리의 다른 글
9. 스파르타 코딩 클럽 - 3월 20일 코딩테스트 연습 (코드카타) (2) | 2025.03.21 |
---|---|
8. 스파르타 코딩 클럽 - 3월 20일 코딩테스트 연습 (코드카타) (0) | 2025.03.20 |
6. 스파르타 코딩 클럽 - 3월 18일 코딩테스트 연습 (코드카타) (0) | 2025.03.18 |
5. 스파르타 코딩 클럽 - 3월 17일 코딩테스트 연습 (코드카타) (0) | 2025.03.17 |
4. 스파르타 코딩 클럽 - 3월 14일 코딩테스트 연습 (코드카타) (0) | 2025.03.14 |