[BOJ 1193] 분수찾기

JaeungE·2021년 6월 5일
0

PS

목록 보기
1/22
post-thumbnail

문제 출처 : [BOJ 1193] 분수찾기, https://www.acmicpc.net/problem/1193

👨‍🏫문제

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.


입력

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


출력

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


예제 입/출력

예제 입력
14

예제 출력
2/4

💻코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Fraction {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int x = Integer.parseInt(br.readLine());

		// 몇 번째 대각선인지 저장하기 위한 변수
		int wave = 1;
		// 대각선마다 몇 번째 수인지 검사하기 위한 변수
		int check = 0;
		// 루프를 탈출하기 위해 누적값을 저장하기 위한 변수
		int count = 0;
		
       		// 누적값이 입력값과 같아지면 루프 탈출
		while(count < x) {
        
			// 각 대각선의 끝에 도달하면 검사용 변수를 초기화 하고 다음 대각선으로 이동
			if(wave == check) {
				wave++;
				check=0;
			}
			check++;
			count++;
		}
		
		/* 
        	 * 짝수 번 대각선 일 경우 분자는 대각선 마다 검사한 수, 
         	 * 분모는 대각선 값에서 검사한 값을 뺀 값에 1을 더해준다. 
             	 */
		if(wave % 2 == 0) {
			bw.write(check + "/" + (wave - check + 1));
		}
		// 홀수 번 대각선 일 경우는 분자와 분모를 뒤집어준다
		else {
			bw.write((wave - check + 1) + "/" + check);
		}
		
		bw.flush();
		bw.close();
		br.close();
	}
}

💡후기

조금 무식하게 푼 감이 없지 않아 있는 것 같다..😢 항상 문제를 풀고 나면 다른 사람은 어떻게 풀었나 확인해보는데, 등차수열로 깔끔하게 푼 사람들도 있고 이 문제 같은 경우에는 각자 풀이가 제각각이라 재밌었다.

이런 수학 구현 문제를 풀 때마다 항상 수학적 사고가 조금 부족하다는 생각이 드는데, 비슷한 문제를 자주 풀어보면서 뇌를 말랑말랑하게 만들어야겠다 ㅎㅎ😋

0개의 댓글