백준 BaekJoon 1193번: 분수찾기 [Java] 자바

2020-11-09


문제

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

이와 같이 나열된 분수들을 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.util.Arrays;
import java.util.Scanner;

public class TemplateA {
		public static void main(String[] args)  {

			Scanner scan = new Scanner(System.in);
			
			int n = scan.nextInt();
			
			int max = 1;
			//대각선 상에서 커질수 있는 최대 수
			//대각선의 줄 수라고도 볼 수 있다.
			while(n != 0) {
				int top = 0;
				//분자 값 초기화
				int bottom = max + 1;
				//분모 값 초기화
				for(int i = 1; i <= max; i++) {
					n--;
					top++;
					bottom--;
					//분자 분모가 하나씩 더해지고 빼지는 만큼
					//n의 순서값도 하나씩 빼줌
					if(n == 0) {
						if(max % 2 != 0) {
							System.out.println(bottom + " / " + top);
						}else {
							System.out.println(top + " / " + bottom);	
						}
						break;
						//배열자체가 지그재그 형식이다보니 max 값이 홀수이면 분모가 위로가고
						//짝수면 분모가 다시 아래로 간다.
					}
				}
				max++;
				//대각선의 길이가 하나씩 커지기 때문에 한 대각선을 다돌면
				//max 값 하나씩 더해줌

			}
			
		}
    }

출처링크: www.acmicpc.net/problem/1193

 

1193번: 분수찾기

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

www.acmicpc.net