최대 1 분 소요

[백준 1193번] 분수 찾기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package _1월_3주차;
 
import java.util.Scanner;
public class 백준_손수경_문제_1193 {
 
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int n = 1//분모
        int m = 1//분자
        int cnt = 0
        int temp = 1//대각선 기준으로 몇 번째에 위치하는지를 구하기 위한 변수이다. 
        //ex. 1/1 -> 1번쩨, 1/2, 2/1 -> 2번째, 3/1, 2/2, 1/3 -> 3번째,,,
        
        while (true) {
            cnt += temp; //cnt: 더해지는 방향이 바뀌는 시작점
            if (cnt >= x) {
                break;
            }
            temp++;
        }
        //temp가 홀수이면 위로 변화, 짝수이면 아래로 변화
        //cnt - x: 대각선 기준으로 규칙을 따르면서 반복될 수 있는 횟수.
        if (temp % 2 == 0) {
            for (int j = 0; j <= cnt - x; j++) {
                n = temp - j;
                m = j + 1;
            }
        }
        else {
            for (int j = 0; j <= cnt - x; j++) {
                m = temp - j;
                n = j + 1;
            }
        }
        System.out.println(n + "/" + m);
        
    }
 
}
cs

브론즈 1치고는 생각보다 어려웠다. while문을 통해서 출력해야될 분수의 위치를 알려주고 있다. cnt를 통해서 더해지는 방향을 알 수 있고, temp를 통해서 몇 번째 줄에 위치하고 있는 분수인지를 알 수 있다.

댓글남기기