[Rust로 백준 하루 하나] 8-6. 분수찾기

김진산·2024년 9월 5일

Rust로 백준 하루 하나

목록 보기
71/138
post-thumbnail

문제 (1193번)

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

1/11/21/31/41/5
2/12/22/32/4
3/13/23/3
4/14/2
5/1

이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

출력

첫째 줄에 분수를 출력한다.


풀이

코드

use std::io;

fn main() {
    let mut x = String::new();
    io::stdin().read_line(&mut x).unwrap();
    let x = x.trim().parse::<i32>().unwrap();
    
    let mut input: i32 = x;
    let mut layer: i32 = 0;
    
    let mut child = 0;
    let mut parent = 1;
    
    while input > 0 {
        layer += 1;
        if layer % 2 == 0 {
            parent += 1;
        } else {
            child += 1;
        }
        
        if input > layer {
            for _ in 1..layer {
                if layer % 2 == 0 {
                    child += 1;
                    parent -= 1;
                } else {
                    child -= 1;
                    parent += 1;
                }
            }
        } else {
            for _ in 1..input {
                if layer % 2 == 0 {
                    child += 1;
                    parent -= 1;
                } else {
                    child -= 1;
                    parent += 1;
                }
            }
        }
        input -= layer;
    }
    println!("{child}/{parent}");
}

해설

특이사항 없음


추가 학습

  • 특이사항 없음
profile
블록체인 개발자

0개의 댓글