1. 두 수의 나눗셈
Q. 정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.
func solution(_ num1:Int, _ num2:Int) -> Int {
let floatNum1 = Float(num1)
let floatNum2 = Float(num2)
var result = floatNum1 / floatNum2 * 1000
return Int(result)
}
A. 입력 받은 Int 값을 Float으로 형변환 후, / 연산자를 통해 몫을 구하고 그 값에 1,000을 구하고
정수 부분만 return 하기 위해 Int로 다시 형변환 한 값을 return으로 반환시켜 해결했다.
feat.
문제를 해결하고 다른 사람의 풀이를 보는데,
생각치도 못한 방법으로 깔끔하게 문제를 해결한 방법을 보며 감탄했다.
func solution(_ num1:Int, _ num2:Int) -> Int {
return num1 * 1000 / num2
}
위 방식처럼 계산의 순서만 바꾸는 아이디어를 사용하면 번거롭게 형변환을 할 필요 없이
단순 계산만으로 정수 부분을 구할 수 있다는 사실을 깨달았다.
때문에, 다른 사람들의 풀이도 꼭 보면서
다양한 관점으로 문제를 해결하는 능력을 기르면 좋을 것 같다!
2. 숫자 비교하기
Q. 정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요.
func solution(_ num1:Int, _ num2:Int) -> Int {
let isEqual = num1 == num2
return isEqual ? 1 : -1
}
A. 입력 값을 비교한 후, 삼항 연산자인 ?를 사용하여 결과값을 return으로 반환시켜 해결했다.
3. 분수의 덧셈
Q. 첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
func solution(_ numer1:Int, _ denom1:Int, _ numer2:Int, _ denom2:Int) -> [Int] {
let denom = denom1 * denom2
let numer = numer1 * denom2 + numer2 * denom1
var gcd = 1
for i in 1...denom {
if denom % i == 0 {
for j in 1...numer {
if numer % j == 0 {
if i == j {
gcd = i
}
}
}
}
}
return [numer / gcd, denom / gcd]
}
A. 문제 해결을 위해 과정을 두 단계로 나누었다.
1. 두 분수를 덧셈
2. 더한 분수를 기약 분수로 나타내기
먼저, 첫번째 단계를 위해 두 분수의 분모를 곱하여 분모를 동일하게 맞추고 그에 맞는 분자를 구하여 두 분수를 더한 분수의 분모와 분자를 구했다.
그리고 기약분수로 나타내기 위해 반복문을 사용하여 최대공약수를 구하고 그 값을 분자와 분모에 나눈 값을 반환하여 문제를 해결했다.
feat.
문제를 해결하면서 기약분수와 최대공약수를 사용했는데
너무 오래전에 배웠던 개념이이라 다시 한 번 짚어보려고 한다.
기약분수란?
‘이미 약분이 끝난 분수’라는 의미로, 분자와 분모의 공약수가 1뿐이어서 더 이상 약분되지 않는 분수
최대 공약수란?
두 수가 서로 공통으로 가지고 있는 약수 중 가장 큰 수
그리고 변수 이름으로 사용한 영단어들도 정리해보았다.
- numer => Numerator (분자)
- denom => denominator (분모)
- gcd => Greatest Common Divisor (최대공약수)
그리고 나는 문제를 해결하면서 반복문을 통해 최대공약수를 구했는데,
다른 사람의 풀이를 보면서 유클리드 호제법이라는 알고리즘에 대해 알게 되었다.
해당 알고리즘은 최대공약수를 구하는 방법 중 하나로 시간복잡도를 줄여주는 알고리즘 같은데
다음 시간에 공부해보고 글을 남기려 한다.
(더 어려운 문제를 해결하기 위해선 꼭 공부해야할 것 같다)
4. 배열 두 배 만들기
Q. 정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.
func solution(_ numbers:[Int]) -> [Int] {
return numbers.map { $0 * 2 }
}
A. 입력값에 고차함수 map을 사용하여 각 원소에 2를 곱한 값을 배열로 반환하여 해결했다.
확실히 1일차에 비해 문제의 난이도가 약간이지만 상승한 느낌이 들었다.
주말에는 4문제를 수월하게 해결하고 글까지 작성할 수 있을 것 같은데
앞으로 평일에는 4문제를 해결하고 글까지 작성할 수 있을지에 대해 의문이지만
할 수 있는 데까지는 열심히 해보고자 한다.
내일도 화이팅!
'Develop > Coding Test' 카테고리의 다른 글
코딩 테스트 입문 (feat. Day 5 수학, 배열) (5) | 2024.11.12 |
---|---|
코딩 테스트 입문 (feat. Day 4 수학, 배열) (0) | 2024.11.11 |
코딩 테스트 입문 (feat. Day 3 사칙연산, 배열, 수학) (2) | 2024.11.10 |
코딩 테스트 입문 (feat. Day 1 사칙연산) (2) | 2024.11.08 |
코딩테스트 입문 (with. 오블완 챌린지) (5) | 2024.11.07 |