BAEKJOON 1193번: 분수찾기

Kim Hyen Su·2023년 6월 23일
0

⏲️ 알고리즘

목록 보기
21/95

1191번 문제

문제

입력

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

출력

첫째 줄에 분수를 출력한다.

🗝️포인트

관련 문제 포스팅을 작성하기 앞서, 다른 포스팅 글들을 참고한 결과, 쉬운 문제라는 말들이 많았는데 나는 너무 어려웠다... 30분 잡다가 문제 풀이 포스팅 글들을 읽고도 이해가 안되서 다시 한번 뜯어서 본 결과, 대충 느낌은 알겠는데 정확하게 왜 이러한 공식으로 결과가 도출되는 지 이해가 되지는 않았다.. 정말 문제 제목 그대로 내 분수를 찾을 수 있었던 기회였다... 내일도, 모레도, 3일 4일... 앞으로도 계속 보고 반성해야 할 문제이다. 나한텐 너가... 베를린 장벽이고 38선이였어...😥

  1. 규칙 찾기
    1) 대각선을 기준으로 확인, 분모 + 분자 = 대각선 칸 수 + 1이다.
    Ex) 1/1 -> 1+1 = 2 ... 대각선 칸수 1개 +1 = 2 !!!
    2) 대각선 칸 갯수 기준,
    홀수 -> 왼쪽 아래에서 오른쪽 위 방향으로 순서가 진행.
    짝수 -> 오른쪽 위에서 왼쪽 아래 방향으로 순서가 진행.

  2. 변수 지정
    1) 입력 값 : X
    2) 대각선 칸 갯수 == 대각선 줄 level : level
    3) 입력 값 해당 대각선 줄 직전까지의 누적갯수 : stack

제출 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
	public static void main(String[] args) throws IOException {
    
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int X = Integer.parseInt(br.readLine()); // 입력값
		
		int level = 1;

		int stack = 0;

		String str = "";

		while(true){
        // 
			if(X <= level + stack){
				if(level%2 == 1){
					str=(level-(X-stack-1))+"/"+(X-stack);
					break;
				}else{
					str=(X-stack)+"/"+(level-(X-stack-1));
					break;
				}
			}else{
				stack += level;
				level++;
			}
		}

		System.out.println(str);
		br.close();
	}
}

나를 이끌어준 기적의 포스팅

profile
백엔드 서버 엔지니어

0개의 댓글