[BOJ] 1193번 분수 찾기

호호빵·2022년 9월 23일
0

Algorithm

목록 보기
28/46

문제

<문제>
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

1/1	1/2	1/3	1/4	1/52/1	2/2	2/3	2/4	…	…
3/1	3/2	3/3	…	…	…
4/1	4/2	…	…	…	…
5/1	…	…	…	…	…
…	…	…	…	…	…
이와 같이 나열된 분수들을 1/11/22/13/12/2 → … 과 같은 
지그재그 순서로 차례대로 1, 2, 3, 4, 5, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.

<입력>
첫째 줄에 X(1X10,000,000)가 주어진다.

<출력>
첫째 줄에 분수를 출력한다.

<예제 입력 1> 			<예제 출력 1 >
1						1/1

5						2/2

14						2/4

풀이

  • 행을 세어줄 a, 원소의 개수를 더해갈 cnt를 지정
  • 행이 짝수인 경우와 홀수인 경우를 나눠서 답 출력(짝수행 <-, 홀수행 ->)
  • 그 행의 분모,분자의 합 = a+1

java 풀이

import java.util.Scanner;

public class Pracc {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int a = 0;   		// 행
        int cnt = 0;		// 원소의 개수 

        while (true) {
            a++;
            cnt += a;

            if (cnt >= N) {						// 원소의 개수가 N보다 커지면
                if (a%2 == 0) {
                    int sum = a + 1;			// 분모+분자 = a+1
                    int ord = N - (cnt - a);   	// 해당 행에서 몇번째인지
                    System.out.println(ord + "/" + (sum - ord));
                } else {
                    int sum = a + 1;
                    int ord = N - (cnt - a);
                    System.out.println((sum - ord) + "/" + ord);
                }

                break;
            }
        }
    }
}

python 풀이

N = int(input())
a = 0
cnt = 0

while True:
    a += 1
    cnt += a

    if cnt >= N:
        if a % 2 == 0:
            sum = a + 1
            ord = N - (cnt - a)
            print(str(ord) + "/" + str(sum - ord))
        else :
            sum = a + 1
            ord = N - (cnt - a)
            print(str(sum - ord) + "/" + str(ord))
        break




1193번 쉬운 풀이

profile
하루에 한 개념씩

0개의 댓글