baekjoon 1193

https://www.acmicpc.net/problem/1193



아 예제 입출력 드럽게많네ㅡㅡ


Idea

우선 문제에서 패턴을 찾아야 한다.

ㅋㅋㅋㅋㅋㅋㅋ그림판 ㅈㅅ

간단한 패턴은 다음과 같다.
위 그림을 2차원 배열이라고 생각하지 말고 1차원 배열로 쭉 늘어뜨려보자.

[1/1] , [1/2] , [2/1] , [3/1] , [2/2] , [1/3] , [1/4], [2/3] ...

이렇게 된다. 잘 보면 규칙을 찾을 수 있다.

화살표가 아래를 향하면 분자는 증가, 분모는 감소하고 위를 향하면 분자는 감소, 분모는 증가한다.
이 화살표에 번호를 매겨보면

즉, 짝수인 화살표는 분자는 증가, 분모는 감소하고 홀수인 화살표는 분자는 감소, 분모는 증가한다.

변수 i는 몇 번째 대각선인지 홀수, 짝수를 판별한다.
변수 x는 x번째 분수를 출력하기 위한 변수이다.
변수 count는 i번째 화살표 안에 있는 차수 중 가장 높은 수이다.

변수를 이렇게 잡고 짝수 화살표에서 두 개, 홀수 화살표에서 두 개 잡고 연산해보니 문제가 풀렸다..!


Code

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	int x, i;
	int count = 1;
	
	scanf("%d", &x);

	for (i = 1; x > count; ) {
		count += ++i;
	}
	
	if (i % 2 == 0) {
		printf("%d/%d", i - (count - x), 1 + (count - x));
	}
	else {
		printf("%d/%d", 1 + (count - x), x - (count - i));
	}
}

굿

좋은 웹페이지 즐겨찾기