[백준/C++] 1193번: 분수찾기

꿈별·2022년 11월 23일
0

문제풀이

목록 보기
11/52

문제

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


풀이

#include <iostream>
using namespace std;

int main(void) {
	int line=1;
	int X;
	
	cin >> X;
	while (X > line) {
		X -= line;
		line++;
	}

	//짝수
	if (line % 2 == 0)
	{ cout << X << "/" << (line + 1) - X; }
	//홀수
	else
	{ cout << (line + 1) - X << "/" << X; }
}

  • 홀수 줄은 대각선 위쪽으로 순서를 세고,
    짝수 줄은 대각선 아래쪽으로 센다.
    -> 순서 : 1/2, 1/2, 2/1, 3/1, 2/2, 1/3, 1/4, 2/3, 3/2, 2/4...

  • line 줄의 순번 (첫째줄 : line=1)

  • 규칙

    • 홀수 줄은 대각선 위쪽 방향으로 분모가 1씩 증가하고,
      짝수 줄은 대각선 아래쪽 방향으로 분자가 1씩 증가한다.
    • line과 각 line의 분수의 개수는 같다
      (ex- line=1 : 1개, line=2 : 2개, line=3 : 3개...)
    • 홀수 줄의 분자는 (줄의 수+1)-분모
      짝수 줄의 분모는 (줄의 수+1)-분자 이다.
    • 이 때, 홀수의 분모, 짝수의 분자는 입력받은 X 에 line=1 부터 빼 가면서 알아낸다.
      -> 1번 때문에 line은 X보다 작아야 한다. (둘이 같으면 분수가 0됨)
    • 따라서 X를 입력받으면 가장 먼저 몇 번째 줄인지 알아낸 뒤 홀/짝에 알맞게 계산해야 한다.

0개의 댓글