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