본문 바로가기

CS ﹒ Algorithm/Baekjoon

JAVA백준 문제풀이 (3) 1193:분수찾기

 

또 수열 문제다.

이번에는 벌집보다 훨씬 단순한 수열로써 분모와 분자 중 어느 쪽이 값이 증가하고 내려가는 구간인지만 헷갈리지 않으면 쉽게 풀 수 있다.

 

 

조건

 

1. 각 대각선 라인의 분모와 분자 값이 1씩 증가하고 있다.

2. 짝수 라인에는 우상단(분모⬆️분자⬇️), 홀수 라인에서는 좌하단(분자⬆️분모⬇️)으로 이동한다.

 

 

 

 

풀이

 

1. while문을 이용해 입력받은 값이 몇번째 라인에 있는지 계산한다.

Scanner scanner = new Scanner(System.in);
int input = scanner.nextInt();
int count = 0;

while ( sum(count) < input ) {
    count++;
}

// 자연수의 합 구하는 메서드
    public static int sum(int count) {
        return ( count * ( count - 1 ) ) / 2;
    }

 

2. count가 홀수라면 분모는 (n-1-최대값과 인풋값의 차) 분자는 (1+최대값과 인풋값의 차)가 된다. 짝수라면 그 반대로.

int difference = sum(count)-input;
int numerator = 0;
int denominator = 0;

if (count%2!=0) {
    numerator = (count-1)-difference;
    denominator = 1+difference;
} else {
    numerator = 1+difference;
    denominator = (count-1)-difference;
}

 

3. 전체 코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int input = scanner.nextInt();
        int count = 0;

        while ( sum(count) < input ) {
            count++;
        }
        int difference = sum(count)-input;
        int numerator = 0;
        int denominator = 0;

        if (count%2!=0) {
            numerator = (count-1)-difference;
            denominator = 1+difference;
        } else {
            numerator = 1+difference;
            denominator = (count-1)-difference;
        }

        String result = numerator + "/" + denominator;
        System.out.println(result);
    }

    public static int sum(int count) {
        return ( count * ( count - 1 ) ) / 2;
    }
}