본문 바로가기

코딩테스트/백준

[백준-자바] 1193번 분수찾기 / 2022.01.23

 

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

 

1193번: 분수찾기

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

www.acmicpc.net

 

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       int number = sc.nextInt();
       int floor = 1; // 몇 번째 층에 있을까?  
       
       // 층 수를 구해보자
       while(number-floor > 0) {
          number -= floor;
         floor++;
       }
       
       int box = number; // 몇 번째 박스?
       int hap = floor+1; // 분모와 분자의 합
       int a=0; int b=0; // 분모, 분자
       
       // 홀수층
       if(floor%2==1) {
          a = box;
          b = hap-box;
       }
       
       //짝수층
       if(floor%2==0) {
          b = box;
          a = hap - box;
       }
       
       System.out.println(b +"/" + a);
    } 
}

 

풀이 : 

 

 

* 사진에서 발견한 조건
홀수층과 짝수층을 나누어서 생각해야한다
- 홀수층은 화살표가 오른쪽으로 짝수층은 화살표가 왼쪽으로 
- 각 층 (floor) 가 있고 각 층에 있는 분수들의 분자 와 분모의 합(hap) 은 floor+1
- 문제를 풀기 위해서 입력받은 수 (number) 의 층을 구한후 그 층의 몇번째 배열(box)에 속해있는지 알아야한다

 

1. 층을 구한다 (floor) -> 층을 구하면 box는 자동으로 구해진다. ( 다 빼고 남은 수 ) 
ex) 입력받은 수 number가 13이라면?
각 층마다 배열의 개수는 1개씩 늘어난다 
floor = 1 -> 배열 1개
floor = 2 -> 배열 2개 
floor = 3 -> 배열 3개
따라서 number - floor > 0 인 조건에서
13 - 1 - 2 - 3 - 4 = 3 
--> floor = 5 box = 3이 구해진다. 
즉 number 13은 5층의 3번째 배열이라는 것 (화살표 방향 유의) 

2. hap을 이용해서 분모와 분자를 구한다 
(분모 : a 분자 : b)
 2-1) 홀수층이라면 ? 
분모는 box 분자는 hap - box
2-2) 짝수층이라면 ? 
분자는 box 분모는 hap-box