(Swift) 백준 분수 찾기 1193

SteadySlower·2022년 5월 16일
0

Coding Test

목록 보기
32/305

1193번: 분수찾기

/*
 각층 분수 갯수 : 1 2 3 4 5
    1층 0 ~ 1
    2층 2 ~ 3
    3층 4 ~ 6
    4층 11 ~ 14
 
    ((n - 1) * n) / 2 < X <= (n * (n + 1)) / 2
 */

let X = Int(readLine()!)!

// X의 몇 번째 줄인지 구하기
var n = 0

repeat {
    n += 1
} while !(X > ((n - 1) * n) / 2 && X <= (n * (n + 1)) / 2)

// X의 n번째 줄의 몇번째 숫자인지 구하기
let i = X - ((n - 1) * n) / 2

// 홀수, 짝수번째 줄에 따라 분수 모양 다르게 하기

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

0개의 댓글