728x90
지그재그로 움직이는 분수의 값을 산출하는 문제이다.
편의상 좌측에 나눈 단계별로 특징을 지니고 있다.
1, 3, 5.. 의 홀수 단계와 2, 4, ... 의 짝수 단계가 분수를 이루는 모습이 정반대인 것을 알 수 있을 것이다.
이러한 특성을 이용하여
이 문제를 풀면서 생각한 논리적 흐름은
- 입력 받는 값이 어느 단계(1...)에 해당하는 값인지를 찾는다.
- 그 단계가 홀수인지 짝수인지 분별한다.
- 홀수의 경우 for 문 안에 '(count - j + 1) / j' 수식을 사용하여 배열을 만들어준다.
- 짝수의 경우 for 문 안에 'j / (count - j + 1)' 수식을 사용하여 배열을 만들어준다.
- 초기 입력된 값이 array 내에 몇번째 숫자인지 index를 확인한다.
사실 이 문제는 정~말 오랜시간이 걸린 것 같다.
논리적 특성은 금방 찾았지만 일단 입력 받는 값이 어느 단계에 속하는지를 수식으로 정리하는 것이 특히 오래 걸린 것 같다.
그래서 여러 글들을 참고하여 내가 가장 쉽게 이해한 방식으로 재코딩하였다.
* 1193번
let X = Int(readLine()!)!
var sum = 0
var count = 0
var arr: [String] = []
for i in 1...X {
sum += i
count += 1
if sum >= X {
break
}
}
var isOdd: Bool {
return count % 2 == 0 ? false : true
}
if isOdd {
for j in 1...count {
arr.append("\(count - j + 1)/\(j)")
}
}else {
for j in 1...count {
arr.append("\(j)/\(count - j + 1)")
}
}
var index = arr.count - (sum - X) - 1
print("\(arr[index])")
정리(Today I Learned)
- 없음
'TIL > 알고리즘 공부' 카테고리의 다른 글
백준 2775번 Swift 알고리즘 연습 (0) | 2022.08.26 |
---|---|
백준 10250번 Swift 알고리즘 연습 (0) | 2022.08.26 |
백준 2869번 Swift 알고리즘 연습 (0) | 2022.08.24 |
백준 2292번 Swift 알고리즘 연습 (0) | 2022.08.22 |
백준 1712번 Swift 알고리즘 연습 (0) | 2022.08.22 |