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