분수찾기

동동·2023년 4월 9일
0

[C++] 백준 문제 풀이

목록 보기
18/32
post-thumbnail

분수찾기

레벨: 실버 5
날짜: 2023년 4월 9일 오후 4:56
문제번호: 1193
알고리즘: 구현, 수학
키워드: 패턴 찾기

시간 제한메모리 제한제출정답맞힌 사람정답 비율
0.5 초 (추가 시간 없음)256 MB100029500114310151.184%

문제

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

1/11/21/31/41/5
2/12/22/32/4
3/13/23/3
4/14/2
5/1

이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 분수를 출력한다.

예제 입력 1

1

예제 출력 1

1/1

예제 입력 2

2

예제 출력 2

1/2

예제 입력 3

3

예제 출력 3

2/1

예제 입력 4

4

예제 출력 4

3/1

예제 입력 5

5

예제 출력 5

2/2

예제 입력 6

6

예제 출력 6

1/3

예제 입력 7

7

예제 출력 7

1/4

예제 입력 8

8

예제 출력 8

2/3

예제 입력 9

9

예제 출력 9

3/2

예제 입력 10

14

예제 출력 10

2/4

풀이

#include <iostream>

using namespace std;

int main() {

    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int x;
    cin>>x;

    //x가 몇번째 라인에 있는지 확인
    int line = 1;
    while(x>line) {
        x = x-line;
        line++;
    }

    //결과로 나온 값은 line번째 대각선의 x번째 있음
    if(line%2==1)  //line이 홀수면
        cout<<line-x+1<<"/"<<x<<'\n';
    else
        cout<<x<<"/"<<line-x+1<<'\n';

}
profile
알고리즘 문제를 주로 업로드합니다.

0개의 댓글