1193번: 분수찾기
let X = Int(readLine()!)!
var n = 0
repeat {
n += 1
} while !(X > ((n - 1) * n) / 2 && X <= (n * (n + 1)) / 2)
let i = X - ((n - 1) * n) / 2
if n % 2 == 0 {
print("\(i)/\(n - i + 1)")
} else {
print("\(n - i + 1)/\(i)")
}
- 수열 + 범위가 혼합된 문제는 (ex. 벌집) 첫 단계의 범위에 0을 포함하면 좀 더 생각하기 쉬워집니다.
- 분수의 첫 단계를 0 ~ 1로 잡으면 규칙성을 더 쉽게 발견할 수 있습니다.
- 규칙성은 각 단계의 분수의 갯수가 1, 2, 3, 4, ...인 등차수열만큼 증가한다는 것입니다. 따라서 등차수열의 합 공식으로 규칙성을 식으로 표현할 수 있습니다.
- 반복문을 통해 n을 1씩 더해가면서 몇번째 줄인지 구합시다.
- 그리고 n 번째 줄의 몇번째 숫자인지 구합니다. X에서 이전 단계까지의 분수의 모든 갯수를 빼주면 됩니다.
- 마지막으로 홀수, 짝수 번째 줄에 따라 분수의 모양이 다릅니다. 고려해서 출력합니다.
- 짝수번째 줄은 분자가 1부터 시작하고
- 홀수번째 줄은 분모가 1부터 시작합니다.