Q. 무한히 큰 배열에 다음과 같이 분수들이 적혀있다. 이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
그리고 범위 내에서 X의 위치를 구했고 해당 범위의 개수(Ex. 4~6 : 3)가 짝수인지 홀수인지 체크해 증가/감소 처리를 했다.
소스
package com.baek.algo;
import java.util.Scanner;
public class Q1193 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int i = 1;
String result = "";
if(x == 1) {
result = "1/1";
} else {
int min = 1;
int max = 1;
while(true) {
min = min + i;
max = max + (i + 1);
if(x >= min && x <= max) {
int pos = 0;
for(int k = min; k <= max; k++) {
if(x == k) {
break;
}
pos = pos + 1;
}
int cnt = max - min;
int a = 0;
int b = 0;
for(int j = 0; j <= cnt; j++) {
if(j == pos) {
if(cnt % 2 == 0) {
a = (cnt + 1) + (j * -1);
b = j + 1;
} else {
a = j + 1;
b = (cnt + 1) + (j * -1);
}
}
}
result = a + "/" + b;
break;
}
i = i + 1;
}
}
System.out.println(result);
sc.close();
}
}