반응형
[BAEKJOON_1193] 분수찾기
문제
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
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)가 주어진다.
출력
첫째 줄에 분수를 출력한다.
예제 입력
14
예제 출력
2/4
해결
분모 기준 : 행에서 1식 증가하여 좌측 대각선으로 감소
분자 기준 : 열에서 1식 증가하여 우측 대각선으로 감소
분자증가 1/1 분모증가
2/1, 1/2
3/1, 2/2, 1/3
4/1, 3/2, 2/3, 1/4
5/1, 4/2, 3/3, 2/4, 1/5
분자 감소 / 분모증가
한다는 것을 볼 수 있다.
- N번재 분수가 몇 번째 대각선에 위치하는지 알아야한다.
- 대각선의 기준 합이 몇인지 알아야한다.
- 대각선의 위치와 합계를 계산했으면 홀수인경우 좌측에서 우측으로(분자 감소, 분모 증가), 짝수인경우 우측에서 좌측으로(분자 증가, 분모감소) 를 계산해준다.
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int sum = 1, cnt = 2;
//1. N번재 분수가 몇 번째 대각선에 위치하는지 위치 값과 총합을 계산해준다
while (n > sum) {
sum += cnt++;
}
cnt--;
sum -= n;
//2. 홀수인경우 분모감소, 분자증가 짝수인경우 분모감소 분자 증가
int numerator = (cnt % 2 == 0) ? cnt - sum : sum + 1;
int denominator = (cnt % 2 == 0) ? sum + 1 : cnt - sum;
System.out.println(numerator + "/" + denominator);
}
}
반응형
'Algorithms > Beakjoon-CodingTest' 카테고리의 다른 글
[BAEKJOON:1475] 방 번호 (0) | 2019.06.19 |
---|---|
[BAEKJOON:1924] 2007년 (0) | 2019.06.19 |
[BAEKJOON:10250] ACM 호텔 (0) | 2019.06.14 |
# [BAEKJOON_1011] Fly me to the Alpha Centauri (0) | 2019.06.13 |
[BAEKJOON:2292] 벌집 (0) | 2019.06.12 |