본문 바로가기

Algorithm (알고리즘)/백준 문제

백준 1193번: 분수찾기 (C++)




1.문제

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

1/11/21/31/41/5
2/12/22/32/4
3/13/23/3
4/14/2
5/1

이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.


2.입력

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

3.출력

첫째 줄에 분수를 출력한다.



소스코드

#include<iostream>
using namespace std;

int main()
{
	int numerator=0; //분자
	int denominator=0; //분모
	int inputNum; //입력할 숫자
	int cnt = 1; // 몇번쨰 줄에 있는지 확인
	cin >> inputNum; // 찾을 번호 입력

	while (cnt < inputNum) //몇번쨰 줄에 있는지 검사
	{
		inputNum = inputNum - cnt; // 1 2 3 4 5 6 7씩 뺴기
		cnt++;
	}
	//14일경우 5(줄) 4번쨰

	if (cnt % 2 == 0) //짝수일떄
	{
		// 분모 1씩 감소 분자 1씩 증가
		for (int i = cnt; i > 0; i--) 
		{
			denominator = i; 
			numerator++;

			inputNum--;
			if (inputNum == 0) // 몇번쨰인지 확인되면 탈출
			{
				break;
			}
		}
	}
	else // 홀수일떄
	{
		// 분모 1씩 증가 분자 1씩 감소
		for (int i = cnt; i > 0; i--)
		{
			numerator = i;
			denominator++;

			inputNum--;
			if (inputNum == 0) // 몇번쨰인지 확인되면 탈출
			{
				break;
			}
		}
	}
	cout << numerator << "/" << denominator; // 출력문
	
	return 0;
}


실행 결과



출처-    https://www.acmicpc.net/problem/1193