ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 1193 분수찾기
    ALGORITHM/BOJ 2022. 2. 6. 22:18

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

     

    1193번: 분수찾기

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

    www.acmicpc.net

    2022-02-06


    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
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
     
    public class Main1193 {
        public static void main(String[] args) throws IOException {
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(bf.readLine().trim());
            int X = Integer.parseInt(st.nextToken());
     
            StringBuilder sb = new StringBuilder();
     
            int T = 1// 라인
            int base = 1// 기준 번호
     
            while(true) {
                if(X >= base && X < base+T) {
                    // (분모+1)/(분자-1)
                    if(T % 2 == 0) { //라인이 짝수 : 기준 번호가 기준부터 오름차순
                        sb.append((1+(X-base))).append("/").append((T-(X-base)));
                        break;
                    } else { // 라인이 홀수 : 기준번호 + T 부터 내림차순
                        int tmp = base + T - 1;
                        sb.append(1+(tmp-X)).append("/").append(T-(tmp-X));
                        break;
                    }
                } else {
                    base += T;
                    T++;
                }
            }
     
            System.out.println(sb.toString());
        }
    }
    cs

    #문제풀이

    base라는 기준 숫자를 기준으로 대각선 한 줄에 X가 속해져있는지 먼저 찾은 후, 그 범위를 찾으면 짝수/홀수 경우의 수를 나눠서 계산했다.

    짝수는 base를 기준으로 홀수는 base+T-1을 기준으로 해당번호를 찾아서 분모, 분자를 찾았다.

     

     

    다른 사람 풀이를 보다보니 조금 더 간단한 방법이 있었다.

     

    주어진 수 X를 기준으로 num++을 빼면서(각 라인에 있을 수 있는 숫자의 총 갯수) 어떤 라인에 있는지 체크하고 그 라인의 몇 번째인지 바로 계산할 수 있었다.

    그리고, 짝수의 경우 위에서부터 카운팅해서 분모가 X, 분자가 (num+1-X)가 되고,

    홀수의 경우 아래에서부터 카운팅해서 분자가 (num+1-X), 분모가 X가 된다.

     

    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
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
     
    public class Main1193_2 {
        public static void main(String[] args) throws IOException {
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(bf.readLine().trim());
            int X = Integer.parseInt(st.nextToken());
     
            StringBuilder sb = new StringBuilder();
     
            int num = 1// 카운트
     
            while(X > num) {
                X -= num++;
            }
            if(num % 2 == 0) {
                sb.append(X).append("/").append(num+1-X);
            } else {
                sb.append(num+1-X).append("/").append(X);
            }
     
     
            System.out.println(sb.toString());
        }
    }
    cs

    'ALGORITHM > BOJ' 카테고리의 다른 글

    [BOJ] 1018 체스판 다시 칠하기  (0) 2022.06.19
    [백준] 10799 쇠막대기  (0) 2022.05.08
    [백준] 1339 단어 수학  (0) 2022.02.05
    [백준] 7568 덩치  (0) 2022.02.02
    [백준] 4991 로봇 청소기  (0) 2021.12.11

    댓글

Programming Diary