반응형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <iostream> using namespace std; int main() { int n; cin >> n; int sum = 0; int num; for (int i = 1; i <= n; i++) { if (sum >= n) break; else { sum += i; num = i; } } if (num % 2 == 0) cout << n - (sum - num) << "/" << num - (n - (sum - num)) + 1 << '\n'; else cout << num - (n - (sum - num)) + 1 << "/" << n - (sum - num) << '\n'; return 0; } | cs |
먼저 문제를 이해해 보면 규칙을 발견할 수 있다. 분모가 2일때는 두번, 3일때는 세번까지 대각선으로 나타내어진다.
그래서 푸는 방법을 그 값을 모두 더해서 받아온 값 n, 즉 몇번째까지 인지와 비교해서 sum값이 더 커지게 되면 반복문을 중지한다.
중지하기 바로 전 인덱스를 모두 sum에 더하고 그 인덱스를 num에 저장을 해놓는다.
이렇게 받아놓은 num값은 분모가 짝수일때는 처음, 홀수일때는 마지막에 해당한다. 그 이유는 매번 분모가 제일 큰 것부터 시작하는 것이 아닌 지그재그로 분수가 몇번째인지를 판단하기 때문이다.
'알고리즘 > 백준' 카테고리의 다른 글
2775번 부녀회장이 될테야 (0) | 2018.10.10 |
---|---|
10250번 ACM 호텔 (0) | 2018.10.10 |
2292번 벌집 (0) | 2018.10.10 |
1316번 그룹 단어 체커 (0) | 2018.10.09 |
2941번 크로아티아 알파벳 (0) | 2018.10.09 |