예시로 주어진 그림을 자세히 보면, 대각으로 규칙이 있습니다.
빨간 대각 선을 기준으로, 분자와 분모의 합은 같습니다.
우리가 찾아낸 규칙을 통해 다음과 같은 규칙을 생각해 볼 수 있을 것 같습니다.
1. 우리가 찾을 X번째의 대략적인 위치를 찾는다. (분모 + 분자를 통해서 2, 3, 3, 4, 4, 4, 5, 5, 5, 5, . . .)
2. 대략적으로 찾은 위치에서 분자/분모를 하여 분자가 1 ~ n까지 분모는 n ~ 1까지 하여 X의 위치를 찾아냅니다.
코드는 다음과 같습니다.
#include<stdio.h>
int main()
{
int user_input;//사용자가 입력한 수
int total = 0;//분수, 분모 더한 값의 위치를 찾는 수
int pos;//분수 내에서 위치찾는 수
int save = 1;//분수 저장값
int i = 1, j = 1;
scanf("%d", &user_input);
while (total < user_input) {//분수, 분모 더한 값의 위치를 찾기
total = total + i;
i++;
}
pos = total - user_input;
if ((i - 1) % 2 != 0) {//홀수 분수 내에서 위치 찾기
if (pos != 0) {
for (; pos != 0; pos--, j++) {
save = i - j - 1;
}
printf("%d/%d", j, save);
}
else printf("1/%d", i - 1);
}
else {//짝수 분수 내에서 위치 찾기
if (pos != 0) {
for (; pos != 0; pos--, j++) {
save = i - j - 1;
}
printf("%d/%d", save, j);
}
else printf("%d/1", i - 1);
}
}
'알고리즘' 카테고리의 다른 글
[BOJ] 15649번. N과 M(1) (0) | 2021.01.10 |
---|---|
[BOJ] 1012번. 유기농 배추 (0) | 2021.01.10 |
[BOJ] 1654번. 랜선 자르기 & 수 찾기 (0) | 2021.01.10 |
[BOJ] 14564번 역원(Inverse) 구하기 (0) | 2021.01.03 |
[2020 APC] 추첨상 사수 대작전!(Hard) 풀이 (0) | 2021.01.03 |