코딩테스트/백준

백준 - 1193. 분수찾기

hwangsehee 2025. 1. 25. 17:26

문제 설명

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

1/1 1/2 1/3 1/4 1/5
2/1 2/2 2/3 2/4
3/1 3/2 3/3
4/1 4/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)가 주어진다.

출력

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

 

import java.io.*;

public class Main {
    public static void main(String argsp[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());

        int range = 0;
        int jump = 0;
        int end = 0;

        while (end < num ){
            jump ++;
            end +=jump;
            range ++;
        }


        int distance = end - num;
        if(range%2 == 0){
            System.out.println((range - distance)+"/" + (1+distance));
        }else {
            System.out.println(1+distance+"/"+(range-distance));
        }

    }
}

1. range 와 jump의 값이 같다. 

= jump 객체는 필요 없다 


import java.io.*;

public class Main {
    public static void main(String argsp[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());
        int range = 1;
        while (range < num ){
            num -=range;
            range ++ ;
        }

        if(range%2 == 0){
            System.out.println(num + "/" + (range - num +1));
        }else {
            System.out.println((range - num +1)+"/"+num);
        }

    }
}

1. num과 range를 한꺼번에 구하기

(몇번째 줄에 몇번째에 해당하는지) 

소스는 좀 더 간결해졌는데, 실행 시간은 좀 늘어났다. 

메모리는 조금 줄어들었음. 

(객체 사용을 덜 해서 그런거겠죠?)