x번째의 수가 해당 대각선 라인의 등차수열 합과 그 이전 대각선 라인의 합 사이에 있을때,
x에서 시작점을 빼고 끝점에서 x를 뺀 후 분모 혹은 분자를 할당해주면된다.
짝수번째 대각선 라인과, 홀수 번째 대각선 라인은 진행 방향이 반대이기 때문.
공차가 1이고 시작이 1인 등차수열은 고정.
ex) x가 9 일때, 9는 6(1+2+3) 과 10(1+2+3+4) 사이에 존재.
그리고 짝수 라인은 진행방향이 왼쪽 사선 아래로 정해져있음. (홀수 라인은 오른쪽 사선 위)
따라서 9번째 분수인 3/2가 나오려면,
분모는 10 - 9 + 1 = 2
분자는 9 - 6 = 3
을 하면 된다.
홀수는 분모 분자식을 바꿔주기만 하면 된다.
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int ip = scanner.nextInt();
int i = 1; //등차수열의 합을 위한 기준
int denominator = 1; //분모
int numerator = 1; //분자
if(ip == 1) {
System.out.println(String.valueOf(numerator) + "/" + String.valueOf(denominator));
return;
}
// 등차수열 공식
// 첫항 마지막항 알때 n(a+l) / 2
// 첫항, 공차 알때 n{2a + (n-1)}d} / 2
while (true) {
int prev = (i * (i + 1)) / 2; // 단계별 현재 등차수열 합.
int next = ((i + 1) * ((i + 1) + 1)) / 2; // 단계별 그 다음항 까지 등차수열 합.
if (prev < ip && ip <= next) {
if(i % 2 == 0){
numerator = next - ip + 1; // 나머지가 0이면 왼쪽 사선 아래로 진행
denominator = ip - prev;
} else { // 나머지가 1이면 오른쪽 사선 위로 진행
denominator = next - ip + 1;
numerator = ip - prev;
}
break;
}
i++;
}
System.out.println(String.valueOf(numerator) + "/" + String.valueOf(denominator));
}