baekjoon: 1193(분수찾기)

강지안·2023년 5월 7일
0

baekjoon

목록 보기
4/186

문제

풀이

각 분수가 위치하는 라인값은 분수의 분모와 분자를 더한 값에 -1하여 구할 수 있다.
(단, 여기서 라인은 대각선을 의미한다) (ex. 1/4는 4번 라인에 위치)
한 라인이 가지는 분수의 개수는 라인마다 1씩 증가한다.
때문에 1+2+...+i < X 중 i의 최댓값이 X의 라인값이 된다.

X에서 1+2+...+i한 값을 빼고 남은 수를 @라고 가정한다.
여기서 i가 짝수일 경우 라인의 흐름은 분자순으로 이동하게 되고(분자가 1,2,3,...),
i가 홀수일 경우 라인의 흐름은 분모순으로 이동하게 된다(분모가 1,2,3,...).

최종적으로 i가 짝수라면 @를 분자, (i+1-@)를 분모로
i가 홀수라면 @를 분모, (i+1-@)를 분자로 결정함으로써 문제를 해결할 수 있다.

개선점

코드 길이를 현재 작성한 코드보다 더 줄일 수 있을 것 같다.
계속 방법을 생각해보자

코드

import java.util.Scanner;

public class q1193 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();

        // 1. N번째 줄 찾기 = 최종 i값
        int N = 0;
        int i = 1;

        while(true) {
            N += i;
            if(N >= X) {
                N -= i;
                break;
            }
            i++;
        }

        // 2. i의 홀짝 구하기
        X -= N;
        if(i%2==0) { // 짝수일 경우 분자순
            System.out.print(X + "/" + (i+1-X));
        } else { // 홀수일 경우 분모순
            System.out.print((i+1-X) + "/" + X);
        }
    }
}

0개의 댓글