백준
백준 1193 분수찾기(Java)
Park DJ
2023. 1. 13. 22:52
https://www.acmicpc.net/problem/1193
1193번: 분수찾기
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
www.acmicpc.net
해석 및 팁
이문제는 지그재그의 규칙을 찾아내는것이 핵심이다.
그룹으로 나누어보면 1번그룹에는 1/1 2번그룹에는 1/2, 2/1 3번그룹에는3/1, 2/2, 1/3이 있다고하면
n번 그룹의개수는 n개이며 n이 홀수이면 분자가 1씩 줄어들고 분모가 1씩늘어나며
짝수이면 분자가 1씩 늘어나고 분모가 1씩 감소한다.
따라서 n번째 그룹까지의 수의 개수는 첫째항이 1이고 등차가 1인 등차수열의 합인 n*(n+1)/2 이므로
주어진수와의 차를 이용하면 해결할 수있다.
Java 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numerator = 0; //분자
int denominator = 0; //분모
int check = 0;
int n = 0;
int x = sc.nextInt();
while(check < x) {
n++;
check = n*(n+1)/2; //a=1, d=1 인 등차수열의 합 = n*(n+1)/2;
}
int gap = x - ((n-1)*n/2);
if(n % 2 == 1) {
numerator = n - gap +1; //홀수행이면 분자가 1씩 줄어들고 분모가 1씩 늘어난다
denominator = gap;
}
else if(n % 2 == 0) {
numerator = gap; //짝수행이면 분자가 1씩 늘어가고 분모가 1씩 감소한다
denominator = n - gap +1;
}
System.out.println(numerator+"/"+denominator);
}
}