코딩테스트/백준
백준 - 1193. 분수찾기
hwangsehee
2025. 1. 25. 17:26
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
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)가 주어진다.
첫째 줄에 분수를 출력한다.
import java.io.*;
public class Main {
public static void main(String argsp[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
int range = 0;
int jump = 0;
int end = 0;
while (end < num ){
jump ++;
end +=jump;
range ++;
}
int distance = end - num;
if(range%2 == 0){
System.out.println((range - distance)+"/" + (1+distance));
}else {
System.out.println(1+distance+"/"+(range-distance));
}
}
}
1. range 와 jump의 값이 같다.
= jump 객체는 필요 없다
import java.io.*;
public class Main {
public static void main(String argsp[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
int range = 1;
while (range < num ){
num -=range;
range ++ ;
}
if(range%2 == 0){
System.out.println(num + "/" + (range - num +1));
}else {
System.out.println((range - num +1)+"/"+num);
}
}
}
1. num과 range를 한꺼번에 구하기
(몇번째 줄에 몇번째에 해당하는지)
소스는 좀 더 간결해졌는데, 실행 시간은 좀 늘어났다.
메모리는 조금 줄어들었음.
(객체 사용을 덜 해서 그런거겠죠?)