[Java] 백준 1193번 : 분수찾기 / 코드 O

노현아·2024년 3월 27일
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int i = 0;
        int sum = 0;
        while (true) {
            if (sum + (i + 1) > n) {
                break;
            }
            sum += i;
            i ++;
        }
        StringBuilder sb = new StringBuilder();
        int j = n - sum;
        if (i % 2 == 0) {
            sb.append(j).append("/").append(i - j + 1);
        } else {
            sb.append(i - j + 1).append("/").append(j);
        }
        System.out.print(sb);
    }
}

/** n번째 분수를 구함
1번째 대각선 : 1/1
2번째 대각선 : 1/2, 2/1

…
4번째 대각선 : 1/4, 2/3, 3/2, 4/1
i번째 대각선 :

* i번째 대각선의 j번째 분수 

- i 짝수일 때 : 1/n, 2/n-1, 3/n-2, ..., n/1 ⇒ j/i-j+1
- i 홀수일 때 : n/1, ..., 3/n-2, 2/n-1, 1/n ⇒ i-j+1/j

[i 구하기 : n번째 분수는 몇 번째 대각선에 속하는지 알아내기]
0부터 순차적으로 증가하는 i값을 sum에 더하는데,
이때 미리 i + 1를 sum에 더해보고 n보다 크면 멈춘다.
이때 n번째 분수는 i번째 대각선 안에 있다
바로 직전 대각선까지의 분수의 개수 sum을 n에서 뺀 n - sum을 j라고 할 때,

n번째 분수는 i번째 대각선의 j번째 분수이다.
**/
profile
성실함과 끊임없는 학습을 통해 성장하는 개발자 지망생입니다. 새로운 도전과 배움을 즐기며 더 나은 코드를 꿈꿉니다.

0개의 댓글