반응형

문제

www.acmicpc.net/problem/1193

코드

백준 1193

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    //각 대각선은 1,2,3,4,5 ...개 의 요소를 가짐
    //각 대각선의 각 요소의 합은 2,3,4,5 ...
    //대각선이 홀수번째 : 마지막 요소 분자 == 1
    //대각선이 짝수번째 : 마지막 요소 분모 == 1

    /*
    1. 몇번째 대각선에 속하는가 ?
    2. 그 대각선은 홀수번째? 짝수번째?
    3. 분모 또는 분자를 1씩 증가시키며 해당 숫자의 위치까지 이동
    4. 분자 또는 분모를 구한다.
    5. 출력
    */

    int a,b;    //answer : a/b

    int n;
    scanf("%d", &n);
    int input = n;  //이따가 필요해서 담아둠, n 값은 바뀔예정

    int max = 0;    //x 번째 대각선의 최대 값
    int x = 1;      //x번째 대각선
    int t = 1;      //범위 조정을 위한 변수
    while(n > 0){
        max += x;
        n = n - x;
        ++x;
    }
    --x;    //x반복문에서 1 증가되서 나오니까 다시 1 감소시켜줌

    //max로부터 몇번째
    int target = max - input;

    if(x % 2 == 1){ //odd   :  마지막 요소 분모 == x
        b = x-target;
        a = x-b+1;
    }else{          //even  :  마지막 요소 분자 == x
        a = x-target;
        b = x-a+1;
    }

    printf("%d/%d", a,b);

    return 0;
}

반응형

'개발 > 알고리즘' 카테고리의 다른 글

프로그래머스 두 정수 사이의 합  (0) 2021.04.03
프로그래머스 가운데 글자 가져오기  (0) 2021.04.02
codeup 2623  (0) 2021.03.20
codeup 1905 1부터 n까지 합 구하기  (0) 2021.03.18
codeup 1904  (0) 2021.03.17
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기