[Baekjoon] 1193번 분수찾기

Hyeona·2021년 7월 8일
1

📗 Baekjoon

목록 보기
8/14
post-thumbnail

📣
Baekjoon에서 PASS된 코드만 업데이트합니다.
알고리즘을 먼저 풀이하는 언어(Java)가 정해져있어,
풀이 언어(Python, C++, Java)가 모두 업데이트될 때까지는 시간이 걸릴 수 있습니다.

문제 제시


문제

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

1/1 1/2 1/3 1/4 1/5  …
2/1 2/2 2/3 2/4  …  …
3/1 3/2 3/3  …  …  …
4/1 4/2  …  …  …  …
5/1 …  …  …  …  …
…  …  …  …  …  …

이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.

입력

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

출력

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



문제 풀이


분자와 분모가 각 행과 열의 특징을 그대로 나타내고 있습니다.
따라서 모든 배열의 내용을 할당하고 탐색하는 것이 아닌 i,j의 특징을 찾아서 바로 표현하면 됩니다.
또한 전체적으로 순서대로 진행되면서, 증가/감소 여부만 다르고 동일한 제한 조건(인덱스가 1 이상)을 가집니다.
이를 스위치 변수로 삼아 구현하면 됩니다.
스위치 변수를 T/F로 하는 것이 아닌 1/-1로 하면 이를 바로 연산하면 됩니다.
즉, 증가할 때와 감소할 때의 코드를 별개로 짤 필요가 없는 것이죠.



문제 코드


Java

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

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

		for (int x = 1; x < X; x++) {
			i -= dir;
			j += dir;
			
			if (i < 1) {
				dir = -1;
				i = 1;
			} else if (j < 1) {
				dir = 1;
				j = 1;
			}
		}
		System.out.println(i + "/" + j);
	}
}


제출 결과


profile
✍🏻 뭐든 배우면 다 자산이 되겠죠!

0개의 댓글