일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- node.js
- 비동기
- GitHub
- 17471
- JavaScript
- Ajax
- 2869
- 1868
- web
- 응답코드
- npm
- 파핑파핑지뢰찾기
- react
- 타겟넘버
- Java
- 백준
- 알고리즘
- JSP
- staged
- SWEA
- commited
- SOCKET
- 소형기관차
- 카카오코드페스티벌
- graph
- 달팽이는올라가고싶다
- HTTP
- boj
- 17822
- Git
- Today
- Total
devlog
[BOJ] 백준 1193 분수찾기-java 본문
문제
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
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)가 주어진다.
출력
첫째 줄에 분수를 출력한다.
문제:https://www.acmicpc.net/problem/1193
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int num=in.nextInt();
int tmp=0,divisor=0,dividend=0;
for(int i=1; i<10000; i++) {
if(num>tmp && tmp+i>=num) {
if(i%2==0) {
divisor=i+1-(num-tmp);
dividend=(num-tmp);
}
else {
divisor=(num-tmp);
dividend=i+1-(num-tmp);
}
break;
}
tmp+=i;
}
System.out.print(dividend+"/"+divisor);
}
} |
cs |
풀이
숫자를 입력받아서 1/1부터 지그재그로 숫자를 읽을 때 입력받은 num번째에 있는 분수를 출력해야 합니다.
일단 지그재그로 읽을 때 첫번째엔 1/1 하나이고 두번째 대각선은 1/2,2/1 이렇게 두개, 세번째 대각선은 3/1,2/2,1/3 이렇게 세개입니다.
이렇게 대각선 하나에 속하는 분수가 한개씩 늘어나므로 한 대각선에 속하는 분수의 개수는 1, 2, 3, 4, 5... 이런식으로 등차수열이 됩니다.
따라서 입력받은수가 14이면 5번째 대각선에 속하며 1+2+3+4+ 4이죠.
그럼 5번째 대각선에 4번째 분수를 출력하게 되면 됩니다.
대각선은 지그재그로 읽기때문에 i번째 대각선은 오른쪽상단부터 내려오면서 읽는지 왼쪽하단부터 올라오면서 읽는지 봐야하는데 i가 짝수이면 위에서 부터 읽고 홀수이면 밑에서 부터 읽습니다.
그래서 if(i%2==0)라는 조건을 걸어주었습니다.
tmp에는 앞에 있는 분수의 개수를 카운트하고 num이 5번째 대각선에 있는 분수라면 num은 1+2+3+4+?일 것이므로 tmp보다는 크고 tmp+i보다는 같거나 작을 것 입니다.
그러니 1~n-1까지의 숫자를 다 더한뒤 num에서 그 수를 빼면 n번째 대각선에 몇번째에 있는지 알 수 있는데 n이 짝수인지 홀수인지 판별하고 짝수이면 분모가 n이고 분자가 1로 시작해서 대각선으로 내려갈수록 분모는 1씩 작아지고 분자는 1씩 커집니다.
홀수이면 그 반대입니다.
이렇게 분모와 분자를 각각 구해서 출력해줍니다.
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 백준 15954 인형들(카카오코드페스티벌)-java (1) | 2019.03.10 |
---|---|
[BOJ] 백준 10250 ACM호텔-java (395) | 2018.12.05 |
[BOJ] 백준 2292 벌집-java (415) | 2018.12.04 |
[BOJ] 백준 1924 2007년 -java (408) | 2018.11.23 |
[BOJ] 백준 15953 상금헌터(카카오코드페스티벌)-java (0) | 2018.11.23 |