티스토리 뷰

문제

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함