내가 생각한 규칙
1. 대각선의 줄을 카운트한 것이 홀수면 대각선 위로 방향, 짝수면 대각선 아래 방향으로 간다
나의 코드 (틀린다고 나옴)
import java.io.*;
public class Problem_1193 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int X = Integer.parseInt(br.readLine());
int count = 0, round = 0;
if (X == 1) {
System.out.println("1/1");
}
for (int i = 2; i <= X; i++) {
if ((i * (i + 1)) / 2 >= X) {
round = i;
count = (((i - 1) * i) / 2);
break;
} else
continue;
}
int num1 = X - count;
int num2 = ((round * (round + 1)) / 2) - X + 1;
if (round % 2 == 1)
System.out.printf("%d/%d", num2, num1);
else
System.out.printf("%d/%d", num1, num2);
br.close();
}
}
분명 답은 다 맞았는데 99%에서 틀렸다고 하니....
그래서 나는 주저하지 않고 풀이를 보았다.
사실 조금 주저 했다 양심에 찔려서
다른 분의 코드
밑의 코드가 나의 생각 10% 추가한 풀이이다.
import java.io.*;
public class Problem_1193 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int X = Integer.parseInt(br.readLine());
int before_cnt = 0, know_cnt = 1;
while (true) {
if (X <= before_cnt + know_cnt) {
int a = (before_cnt + know_cnt) - X;
// 홀수
if (know_cnt % 2 == 1) {
System.out.println((1 + a) + "/" + (know_cnt - a));
} else {
System.out.println((know_cnt - a) + "/" + (1 + a));
}
break;
} else {
before_cnt += know_cnt;
know_cnt++;
}
}
}
}
양심에 찔려 하는 말이지만 내가 본 게시물의 정답 코드를 딱 진짜 따아아악 홀수 짝수 나누고 어떨 때 누적을 더하는지까지...
(사실 이정도면 다 봤다고 해도 할 말 없지만..)
참고한 게시물
1. https://st-lab.tistory.com/74