728x90
https://www.acmicpc.net/problem/1193
문제
문제를 잘 못 읽었다 ! 지그제그 인 줄....
풀이
코드
/*
* 백준 - 단계별 문제풀이 : 기본수학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
'Algorithm > BaekJoon' 카테고리의 다른 글
[3613] Java vs C++ - Priority Queue에 string넣으면 (0) | 2021.09.18 |
---|---|
[2869] 달팽이는 올라가고 싶다 (0) | 2021.08.29 |
[2292] 벌집 (0) | 2021.08.28 |
[15552] 빠른 A+B - ios_base::sync_with_stdio(false)와 cin.tie(null) (0) | 2021.08.27 |
[2741]N 찍기 - "\n" vs endl (0) | 2021.08.27 |