CodingTest/BOJ

[BOJ 1193] 백준 분수찾기 풀이 - C++

황수진 2021. 9. 21. 15:14

사용언어 :  C++

 

 

문제풀이

<규칙찾기>

(1/1), (1/2,2/1), (3/1,2/2,1/3) , (1/4,2/3,3/2,4/1) ... 

대각선을 기준으로 각 분수들은 분자 분모의 합이 동일하다. 

1+1=2, 1+2=3, 2+1=3, 3+1=4, 2+2=4, 1+3=4, 

그리고 대각선 별 각 분수들의 갯수는 하나씩 증가한다 (1/1 1개, 1/2 2/1 2개, 3/1 2/2 1/3 3개) 

 

 

* 지역변수 x는 (1)대각선 분수들의 갯수이면서 (2)분자분모의 합이 된다. 

(여기서 (1)과 (2)는 값이 1만큼 차이나는데 분수값을 출력할 때 cnt+1로 계산해준다)

 

 

 

 (1) 입력 값 x 순서 분수의 분자 분모 합이 얼마인지 계산하기 

	cin >> x;
	int cnt = 1; //갯수가 한개(1/1)부터 시작
	
	while (x - cnt > 0) {
		x = x - cnt;
		cnt++;
	}

 

 

(2) cnt (분자분모 합) 과 while문에서 남겨진 x (해당 대각선의 분수 순서에서 index값 역할을 함) 를 통해 분수를 구한다 

* 이때 대각선의 갯수가 짝수일 땐 (1/2 -> 2/1) 분자가 1부터 시작하고 홀수일 땐 (3/1->2/2->1/3) 분모가 1부터 시작

//분모분자의 합 : cnt+1
if (cnt % 2 == 0) 
		cout << x << '/' << cnt + 1 - x; 
else 
		cout << cnt + 1 - x << '/' << x;

 

 

 

전체코드

 

#include<iostream>
using namespace std;

int x;
int main() {
	cin >> x;
	int cnt = 1;
	
	while (x - cnt > 0) {
		x = x - cnt;
		cnt++;
	}
    
	if (cnt % 2 == 0) 
		cout << x << '/' << cnt + 1 - x;
	else 
		cout << cnt + 1 - x << '/' << x;
    
}

 

 

 

총평

간단해보였지만 생각보다 시간이 조금 걸렸던 문제..! 수학적 사고력은 어떻게 기를 수 있나요 ^-ㅠ 


문제 출처

https://www.acmicpc.net/problem/1193

 

1193번: 분수찾기

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

www.acmicpc.net