day12 백준 1193번 : 분수찾기 [Java]

문제출처

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

 

1193번: 분수찾기

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

www.acmicpc.net

규칙찾기~

import java.util.Scanner;
public class d012_Q1193 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int x = sc.nextInt();
		int a = 1;
		int b = 1;
		int count = 1;
		while(count < x) {
			if(a == 1) {
				if(b % 2 != 0) {
					b++;
					count++;
					continue;
				}
			}
			
			if(b == 1) {
				if(a % 2 == 0) {
					a++;
					count++;
					continue;
				}
			}
			
			if((a + b) % 2 == 0) {
				a--;
				b++;
				count++;
			}
			else {
				a++;
				b--;
				count++;	
			}
		}
		System.out.println(a + "/" + b);
		sc.close();

	}

}

 

일단 맞은 코드지만 상당히 지저분하다. 정말 짜는내내 이게 최선인가?라는 생각밖에 들지 않았지만 일단 맞긴 맞았으니

과정을 써보겠다.

 

지그재그가 변하는 패턴을 보면 분모가 1일때나 분자가 1일때 대각선으로 방향을 바꾼다.

분자가 1일 때는 분모가 짝수여야 대각선으로 움직이고

분모가 1일때는 분자가 홀수여야지 대각선으로 움직인다.

 

그다음 분자와 분모가 모두 1이 아닐때 대각선의 이동방향이다.

분모와 분자의 합이 짝수일때는 대각선 오른쪽 윗방향으로 이동하기 때문에 분자는 점점 줄어들고 분모는 점점 늘어난다.

합이 홀수일때는 대각선 왼쪽 아래방향으로 이동하기 때문에 분자는 점점 늘어나고 분모는 점점 줄어든다.

 

검색해서 다른 사람들은 어떻게 풀었나 찾아보는데

일단 나처럼 복잡하게 푼 사람이 없어서 놀랐고 눈물...ㅠ

대각선 몇번째 라인에 위치하는지 찾은 후

그라인이 위로 올라가는지 밑으로 내려가는지 판별 후에 구하는 식으로 하더라.

이렇게도 한번 풀어봐야겠다고 생각함...

 

일단 오늘은 끝

myoskin