Algorithm/BaekJoon
[1193] 분수찾기
IagreeBUT
2021. 8. 28. 16:18
728x90
https://www.acmicpc.net/problem/1193
1193번: 분수찾기
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
www.acmicpc.net
문제
문제를 잘 못 읽었다 ! 지그제그 인 줄....
풀이
코드
/*
* 백준 - 단계별 문제풀이 : 기본수학1
* 1193번
*
* 분수찾기
* 이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은
* 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
* X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
*
*/
#include <iostream>
using namespace std;
void solution(int x) {
int m;
int n = 1;
int min, max;
int a, b;
if (x == 1) {
cout << "1/1" << "\n";
return;
}
while (true) {
min = 1 + n * (n - 1) / 2;
max = n * (n + 1) / 2;
if (min <= x && max >= x) break;
n++;
}
m = x - min;
a = 1 + m;
b = n - m;
cout << a << "/" << b << "\n";
}
int main() {
int x;
cin >> x;
solution(x);
}
하지만, 그냥 알고리즘은 비슷하게 생각했고,
그냥 짝수층일 때, 홀수 층일 때 시작지점이 다른 점을 이용해서 다음과 같이 맨 아래에
짝수층일 경우와 홀수 층일 경우 a,b를 변경해 주었다.
/*
* 백준 - 단계별 문제풀이 : 기본수학1
* 1193번
*
* 분수찾기
* 이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은
* 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
* X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
*
*/
#include <iostream>
using namespace std;
void solution(int x) {
int m;
int n = 1;
int min, max;
int a, b;
if (x == 1) {
cout << "1/1" << "\n";
return;
}
while (true) {
min = 1 + n * (n - 1) / 2;
max = n * (n + 1) / 2;
if (min <= x && max >= x) break;
n++;
}
m = x - min;
if (n % 2 == 0) { //짝수 층일 때,
a = 1 + m;
b = n - m;
} else {
a = n - m;
b = 1 + m;
}
cout << a << "/" << b << "\n";
}
int main() {
int x;
cin >> x;
solution(x);
}
궁금한 점
없고 문제를 잘 읽자!
728x90