[Try Again]
문 제
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
입 력
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
1
2
3
9
14
출 력
첫째 줄에 분수를 출력한다.
1/1
1/2
2/1
3/2
2/4
코 드
몇 번째 대각선에 있는지 구하면 쉽게 푸는 문제! 그런데 오래 걸렸다.. 문제를 보면 홀수는 대각선 위 방향으로, 짝수는 대각선 아래 방향의 순서를 갖는다. 하지만 문제를 풀 때는 짝수번째 대각선이면 시작점을 대각선 ‘아래 방향’에서 부터 푸는 방식 적용! 반대로 홀수번째 대각선이면 시작점을 대각선 ‘위 방향’으로부터 시작!
using static System.Console;
namespace Algorithm
{
class Program
{
static void Main(string[] args)
{
int X = int.Parse(ReadLine());
int count = 0; // 대각선에서 제일 끝에 번째 녀석
int sequence = 0; // 대각선 순서가 홀/짝인지 구분하는 녀석
while(count < X)
{
sequence++;
count += sequence;
}
int dif = count - X; // 홀/짝 대각선에서 몇 번째에 있는지
int denominator = 0;
int numerator = 0;
if(sequence % 2 == 0)
{// 짝수번째 대각선
denominator = 1 + dif;
numerator = sequence - dif;
}
else
{// 홀수번째 대각선
denominator = sequence - dif;
numerator = 1 + dif;
}
WriteLine($"{numerator}/{denominator}");
}
}
}
비교코드 - 1