티스토리 뷰
문제
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
1/1 | 1/2 | 1/3 | 1/4 | 1/5 | … |
2/1 | 2/2 | 2/3 | 2/4 | … | … |
3/1 | 3/2 | 3/3 | … | … | … |
4/1 | 4/2 | … | … | … | … |
5/1 | … | … | … | … | … |
… | … | … | … | … | … |
이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
출력
첫째 줄에 분수를 출력한다.
#include <iostream>
using namespace std;
int main() {
int x, i;
cin >> x;
for (i = 1; x > 0; i++) {
x -= i;
}
i -= 1;
if (i % 2 == 1) {
printf("%d/%d", i + 1 - (i + x), i + x);
}
else {
printf("%d/%d", i + x, i + 1 - (i + x));
}
}
해결: 먼저, 입력된 값이 몇번째 줄에 해당하는지 파악
만약 14가 들어왔다면 1부터 차례대로 빼봄
반복문을 돌리고 난 이후 i=6, x=-1이 됨
반복문을 빠져나올 때 i가 하나 더 증가된 상태로 나오므로 1을 빼줌 (14는 5번째줄에 해당)
i=5, x=-1이 됨
홀수줄(1,3,5...)은 내림차순, 짝수줄(2,4,6...)은 오름차순이므로 나누어서 생각
14가 있는 5번째줄은 내림차순으로 분모는 i+x가 되고, 분자는 줄 수 i에 1을 더한 값에서 분모 값(i+x)을 빼줌
따라서, 5+1 - (5-1) / 5-1이 되므로 답은 2/4
오름차순은 내림차순 분수에서 분자,분모를 바꿔줌
어렵다...
'백준 > BRONZE' 카테고리의 다른 글
[백준/C++] 1919 애너그램 만들기 (0) | 2021.02.23 |
---|---|
[백준/C++] 1340 연도 진행바 (0) | 2021.02.20 |
[백준/C++] 1233 주사위 (0) | 2021.02.18 |
[백준/C++] 1225 이상한 곱셈 (0) | 2021.02.18 |
[백준/C++]1075 나누기 (0) | 2021.02.15 |