본문 바로가기

verdantjuly/코딩테스트

백준 1193번 : 분수찾기 (Java, 20240327)

728x90

문제 바로가기: https://www.acmicpc.net/problem/1193

나의 풀이 FAIL

풀지 못함

 

다른 사람의 풀이

보미 님

import java.io.*;

public class no1193 {
    /**
 *     2      #3  4    #5  6
     1/1	1/2	1/3	1/4	1/5	…
     2/1	2/2	2/3	2/4	…	…   #은 분모감소 분자증가 (홀수)
     3/1	3/2	3/3	…	…	…    각 대각선 열의 개수 -> 1씩 증가
     4/1	4/2	…	…	…	…
     5/1	…	…	…	…	…
     …	…	…	…	…	…

     */
    public static void main(String[] args) throws IOException {
        BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(System.out));

        int x = Integer.parseInt(bfr.readLine());

        int line =0;
        int result =0;
        int i=1;
        while(true){
            if(x <= i* (i+1)/2){ //등차수열 합, n번 라인까지 총 분수의 개수 1+2+3...+n = n(n+1)/2
                line = i; // 몇번째 대각라인에 속했는지
                result = x-(i-1)*i/2; //i번 대각 라인에 속해있다면, i-1라인까지의 분수 개수를 빼..
                break;
            }
            i++; 
        }
        if(line % 2 == 0){ 
            bfw.write(result+"/"+(line-result+1));
        } else bfw.write((line-result + 1)+"/"+result);
        bfw.flush();
    }
}

 

성호 님

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int X = Integer.parseInt(br.readLine());

        int count = 0; 
        int line = 0; 

        while (count < X) {
            line++;
            count += line;
        }

        int termIntoLine = X - (count - line);

        int numerator, denominator;
        if (line % 2 == 0) { 
            numerator = termIntoLine;
            denominator = line + 1 - termIntoLine;
        } else {
            numerator = line + 1 - termIntoLine;
            denominator = termIntoLine;
        }
        System.out.println(numerator + "/" + denominator);
    }
}

 

호현 님

// 메모리 14232 KB, 시간 128 ms

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

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int x = Integer.parseInt(br.readLine());
        int i = 0;
        while (x > 0) x -= ++i;

        StringBuilder sb = new StringBuilder();
        if (i % 2 == 0) sb.append(x + i).append('/').append(1 - x);
        else sb.append(1 - x).append('/').append(x + i);
        System.out.println(sb);
    }
}

 

소감

 

어렵다.