Computer Science (CS)/알고리즘

[백준/Java] 1193번 분수찾기

eune7 2023. 5. 19. 12:06
728x90
반응형

 

 

 

 

 

 

문제

 

 

 

정답 풀이

import java.io.*;

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 top = 1;
        int bottom = 1;
        int line = 1;
        int n = 1;

        if(X==1) System.out.print(top+"/"+bottom);
        else{
            while(n < X) {
                line++;
                n += line;
            }
            // 짝수행
            if(line%2==0){
                top = line;
                for(int i = 0; i < n-X; i++){
                    top--;
                    bottom++;
                }
            }
            // 홀수행
            else{
                bottom = line;
                for(int i = 0; i < n-X; i++){
                    top++;
                    bottom--;
                }
            }
            System.out.print(top+"/"+bottom);
        }

        br.close();
    }
}
  • 메모리 16104KB
  • 시간 156ms

다 풀고 난 후에 구글링해서 보니까 제가 제일 비효율적으로 푼 거 같긴 해요..

while문도 돌고 for문도 도니까요..

그치만 구글링해서 본 블로그 코드들은 아직 이해가 안가서..일단 제 실력대로 푼 코드는 이러합니다!

 

코드가 진행됨에 따라 분수는 위 표와 같이 변해요

라인이 짝수라면 주황색 화살표를 따라 분모가 -1, 분자가 +1 되고,

라인이 홀수라면 파란색 화살표를 따라 분모가 +1, 분자가 -1 됩니다

 

while문을 돌려서 line값과 line값에 최대 갯수(예를 들어 라인이 3이라면 값의 갯수는 6)를 구했어요

line값이 짝수인지 홀수인지 if문으로 확인해주고

 

짝수라면 최대 갯수와 구하고자 하는 X의 차이만큼 for문을 돌리면서

분자(top)은 line에서 -1만큼 줄어들게, 분모(bottom)은 1에서 +1만큼 늘어나게 해줬어요

 

홀수라면 짝수와 반대로

분자(top)은 1에서 +1만큼 늘어나게, 분모(bottom)은 line에서 -1만큼 줄어들게 했습니다

 

제 설명이 좀 부족하죠..ㅠ

코드를 보면서 하나하나 이럴 때 어떨까 공책에 쓰면서 직접 돌려보시면 좀 이해가 되실거에요!

 

 

 

 

 

 

728x90
반응형