본문 바로가기
Baekjoon 자바 코드/일반 수학

[백준] 1193번 분수 찾기 코드 (Java 자바)

by 망댕이 2024. 12. 19.
반응형

 

무한히 큰 배열에서 위 표와 같은 분수를 배열해놓고 지그재그로 나열하였다.그 때 입력값에 해당하는 분수를 출력하는 문제이다.

접근 방법)

일단 저 표를 먼저 쉽게 바꿔보자. 아래 그림과 같은 규칙을 가지고 있다.
하지만 이 규칙을 코드로 어떻게 구현할 것이냐..

 

x축의 변수를 number_X라 하고 y축의 변수를 number_Y라고 하자.

number_X가 3이고, number_Y가 4인 값은 3/2인것이다.

 

하지만 문제가 있다 number_Y가 1인 첫번째 줄을 제외하고 홀수줄과 짝수줄 출력 패턴이 반대인 것을 확인할 수 있다.

그럼 number_Y가 홀수, 짝수 여부에 따라 출력을 다르게 해야한다.

 

결과적으로 짝수일 때는 number_X+"/"+(number_Y+1-number_X)를 출력하고,

홀수일 때는 number_Y+1-number_X)+"/"+number_X를 출력하면 된다.

 

그럼 number_Y와 number_X를 구하는 방법을 알면 문제를 해결할 수 있는 것이다.

아래 코드를 보면서 알아보자.

정답 코드 1)

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();             // 입력값
        
        int delete = 1;                   // number_Y줄의 분수 개수(1,2,3,4..점차 증가 예정)
        int number_Y = 0;                 // 세로축

        if(X == 1){                       // number_Y줄 case는 바로 출력
            System.out.print("1/1");
        }else{
            while (X > 0){
                X  = X - delete;          // 현재 number_Y줄의 분수 개수를 X에서 삭감
                delete++;                 // 다음 number_Y줄의 분수 개수로 넘어감
                number_Y++;               // 다음 number_Y줄로 넘어감
            }
            int number_X = number_Y + X;  // number_X 구하기
            if(number_Y%2 == 0){          // 짝수 일때
                System.out.print(number_X+"/"+(number_Y+1-number_X));
            }else{                        // 홀수 일때
                System.out.print((number_Y+1-number_X)+"/"+number_X);
            }
        }
    }
}

 

여러가지 case를 생각해야하는 문제이기 때문에 실버 난이도를 가지고 있었던 것 같다.

이러한 문제를 풀 때는 규칙을 가지고 있는 표 혹은 그림을 코드로 작성하기 쉽게 나만의 방식으로 변환하는 것이 중요하다고 생각한다.

반응형