본문 바로가기
알고리즘/백준

1193번 문제 : 분수찾기

by son_i 2023. 5. 5.
728x90

1193번: 분수찾기 (acmicpc.net)

 

1193번: 분수찾기

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

www.acmicpc.net

자바

N개의 갯수만큼 분수들을 나눠봤다

1 : 1/1

2 : 1/2, 2/1

3 : 3/1, 2/2, 1/3

4 : 1/4, 2/3, 3/2, 4/1

5: 5/1, 4/2, 3/3, 2/4, 1/5

이렇게고 덩어리마다 순서대로 쓴 거임

보면 홀수번째 덩어리는 분자는 N번째 덩어리면 N까지 증가하고 분모는 N부터 1까지 감소

짝수번째 덩어리는 분모는 N까지 증가, 분자는 N부터 1까지 감소하는 거를 알 수 있었다.

 

 덩어리까지의 갯수를 표시하는 변수 : dong

T숫자가 몇 번째 덩어리에 들어있는지를 알기 위해서 i의 수를 1부터 계속 증가시켜가며 더해줌.

덩어리를 찾았으면 i가 하나 더 증가되어있엇을 거니까 감소시키고

 

N번째 덩어리 안에 몇 번 째 숫자인지를 나타내는 ch 변수에 i - (dong -T) 를 해서 대입.

i가 5(5번째 덩어리) , dong은 5번째까지의 덩어리 갯수 15 T는 입력받은 숫자 14

==> ch는 4 결국 입력된 숫자 14는 5번째 덩어리의 4번째 숫자라는 것을 알 수 있다.

 

조건 1. i%2 == 0 //짝수 덩어리

  분자는 1부터 덩어리 i까지 증가

  분모는 i+1에서 ch만큼 빼면 됨.

조건 2. i%2 != 0 //홀수 덩어리

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

class Main{
	public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	
    	int T = Integer.parseInt(br.readLine());
    	StringBuilder sb = new StringBuilder();
    	int dong = 0;
    	int i=1;
    	while(dong < T) {
    		dong += i;
    		i++;
    	}i--;
    	int ch = i - (dong - T); //i == 해당 덩어리에서 몇 번째에 있는지
    	if(i %2 == 0) {//짝수 덩어리
    		for(int j=1;j<=i;j++) {
    			if(ch == j) {
    				sb.append(j+"/"+(i+1-ch));
    				break;
    			}
    		}
    	}
    	else {//홀수 덩어리
    		for(int j=1;j<=i;j++) {
    			if(ch == j) {
    				sb.append((i+1-ch)+"/"+j);
    				break;
    			}
    		}
    	}
    	System.out.println(sb);
 	}
}