1193번: 분수찾기
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
www.acmicpc.net
문제
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
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)가 주어진다.
출력
첫째 줄에 분수를 출력한다.
대각선을 보면 분수의 개수가 1개 2개 3개 4개 5개 ... 등차수열을 이루고 있다.
그리고 분수의 개수가 짝수이면 아래로 내려가고 홀수이면 위로 올라간다.
if-else문을 사용하여 짝수인경우 (i%2 ==0)인 경우를 이용해 풀었다.
내려갈때는 분자가 커지고 올라갈때는 분모가 커지는 경우를 이용해서 풀었다.
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int i=1;
int sum = 0;
int top =1, bot = 1; //분자 ,분모 값 1로 초기화
while(true){
sum += i;
if(sum >= x){
break;
}
i++;
}
if(i%2== 0){
for(int j=0; j<=sum-x;j++){
top = i-j;
bot = j+1;
}
}
else{
for(int j=0; j<=sum-x;j++){
bot = i-j;
top = j+1;
}
}
System.out.println(top + "/" + bot);
}
}
'백준 알고리즘 > JAVA' 카테고리의 다른 글
백준/10250/ACM 호텔/JAVA (0) | 2021.10.01 |
---|---|
백준/2869/달팽이는 올라가고 싶다/JAVA (0) | 2021.09.29 |
백준/2292/벌집/JAVA (0) | 2021.09.27 |
백준/1712/손익분기점/JAVA (0) | 2021.09.24 |
백준/1316/그룹 단어 체커/JAVA (0) | 2021.09.23 |
댓글