각 분수가 위치하는 라인값은 분수의 분모와 분자를 더한 값에 -1하여 구할 수 있다.
(단, 여기서 라인은 대각선을 의미한다) (ex. 1/4는 4번 라인에 위치)
한 라인이 가지는 분수의 개수는 라인마다 1씩 증가한다.
때문에 1+2+...+i < X 중 i의 최댓값이 X의 라인값이 된다.
X에서 1+2+...+i한 값을 빼고 남은 수를 @라고 가정한다.
여기서 i가 짝수일 경우 라인의 흐름은 분자순으로 이동하게 되고(분자가 1,2,3,...),
i가 홀수일 경우 라인의 흐름은 분모순으로 이동하게 된다(분모가 1,2,3,...).
최종적으로 i가 짝수라면 @를 분자, (i+1-@)를 분모로
i가 홀수라면 @를 분모, (i+1-@)를 분자로 결정함으로써 문제를 해결할 수 있다.
코드 길이를 현재 작성한 코드보다 더 줄일 수 있을 것 같다.
계속 방법을 생각해보자
import java.util.Scanner;
public class q1193 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int X = sc.nextInt();
// 1. N번째 줄 찾기 = 최종 i값
int N = 0;
int i = 1;
while(true) {
N += i;
if(N >= X) {
N -= i;
break;
}
i++;
}
// 2. i의 홀짝 구하기
X -= N;
if(i%2==0) { // 짝수일 경우 분자순
System.out.print(X + "/" + (i+1-X));
} else { // 홀수일 경우 분모순
System.out.print((i+1-X) + "/" + X);
}
}
}