728x90
1193번: 분수찾기
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
www.acmicpc.net
자바
N개의 갯수만큼 분수들을 나눠봤다
1 : 1/1
2 : 1/2, 2/1
3 : 3/1, 2/2, 1/3
4 : 1/4, 2/3, 3/2, 4/1
5: 5/1, 4/2, 3/3, 2/4, 1/5
이렇게고 덩어리마다 순서대로 쓴 거임
보면 홀수번째 덩어리는 분자는 N번째 덩어리면 N까지 증가하고 분모는 N부터 1까지 감소
짝수번째 덩어리는 분모는 N까지 증가, 분자는 N부터 1까지 감소하는 거를 알 수 있었다.
덩어리까지의 갯수를 표시하는 변수 : dong
T숫자가 몇 번째 덩어리에 들어있는지를 알기 위해서 i의 수를 1부터 계속 증가시켜가며 더해줌.
덩어리를 찾았으면 i가 하나 더 증가되어있엇을 거니까 감소시키고
N번째 덩어리 안에 몇 번 째 숫자인지를 나타내는 ch 변수에 i - (dong -T) 를 해서 대입.
i가 5(5번째 덩어리) , dong은 5번째까지의 덩어리 갯수 15 T는 입력받은 숫자 14
==> ch는 4 결국 입력된 숫자 14는 5번째 덩어리의 4번째 숫자라는 것을 알 수 있다.
조건 1. i%2 == 0 //짝수 덩어리
분자는 1부터 덩어리 i까지 증가
분모는 i+1에서 ch만큼 빼면 됨.
조건 2. i%2 != 0 //홀수 덩어리
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
int dong = 0;
int i=1;
while(dong < T) {
dong += i;
i++;
}i--;
int ch = i - (dong - T); //i == 해당 덩어리에서 몇 번째에 있는지
if(i %2 == 0) {//짝수 덩어리
for(int j=1;j<=i;j++) {
if(ch == j) {
sb.append(j+"/"+(i+1-ch));
break;
}
}
}
else {//홀수 덩어리
for(int j=1;j<=i;j++) {
if(ch == j) {
sb.append((i+1-ch)+"/"+j);
break;
}
}
}
System.out.println(sb);
}
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
(백준/자바) 19532번 문제 : 수학은 비대면 강의입니다. (0) | 2023.05.19 |
---|---|
10757번 문제 : 큰 수 A+B (0) | 2023.05.05 |
2903번 문제 : 중앙 이동 알고리즘 (0) | 2023.05.05 |
2720번 문제 : 세탁소 사장 동혁 (0) | 2023.05.05 |
11005번 문제 : 진법변환2 (0) | 2023.05.05 |