1.문제
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
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번째 분수를 구하는 프로그램을 작성하시오.
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
'Algorithm (알고리즘) > 백준 문제' 카테고리의 다른 글
백준 2309번: 일곱 난쟁이 (C++) (0) | 2020.03.18 |
---|---|
백준 10972번: 다음 순열 (C++) (0) | 2020.03.18 |
백준 2292번: 벌집 (C++) (0) | 2018.11.18 |
백준 2438번: 별 찍기 -1 (C++) (0) | 2018.11.17 |
백준 10039번: 평균 점수 (C++) (0) | 2018.11.15 |