분수찾기

15 June 2019

문제 : https://www.acmicpc.net/problem/1193

이번은 각 분수들의 규칙을 찾는 문제를 풀어보도록 하겠습니다.

import java.util.Scanner;

public class Main {

    public static void main(String args[]) {

        Scanner scanner = new Scanner(System.in);

        int value = scanner.nextInt();

        int line = 1;
        while (true) {

            value -= line;
            if (value <= 0) {
                value += line;
                break;
            }
            line++;
        }
        
        int first = 0;
        int last = 0;

        if (line % 2 == 0) {
            first = value;
            last = line + 1 - first;
        } else {
            last = value;
            first = line + 1 - last;
        }

        System.out.println(first + "/" + last);
    }
}
각 분수의 규칙을 보면 각 대각선 라인별로 1,2,3,4,5개로 증가가 되고 홀수인 경우는 분자, 짝수인 경우는 분모가 각 라인의 크기만큼부터 시작하는 걸 볼 수 있습니다.
분자는 반대로 1부터 시작해 라인의 크기만큼 증가하게 됩니다.
따라서, 몇번째 라인, 몇번째 수인지를 찾으면 해당 값을 찾을 수 있게 됩니다.
각 라인이 짝수인 경우는 분자의 값이 1부터 증가, 홀수인 경우는 분모의 값이 1부터 증가입니다.
그리고, 분자와 분모의 합은 라인값+1 과 같기 때문에 위 코드와 같이 몇번째 수인지를 알게 되면 둘 다 값을 알 수 있게 됩니다.