일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- HTML
- SWiFT
- 자료구조
- Stack
- 시간복잡도
- 미로 탐색 알고리즘
- War Game
- windosws wbcs
- 백준
- pwnable.kr
- OSI
- 암호수학
- 재귀
- 정렬 알고리즘
- System
- Java
- windosw 문자열
- 두근두근 자료구조
- C
- 파일 시스템
- ftz
- c언어
- web
- 큐
- PHP
- 파이썬
- 스택
- LoB
- ftz level13
- level13
Archives
- Today
- Total
나의 기록, 현진록
[C] <BAEKJOON> 백준 1193번 : 분수찾기 본문
반응형
1193번 - 분수찾기
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
0.5 초 (추가 시간 없음) | 256 MB | 35321 | 17184 | 15321 | 52.886% |
문제
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
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
14
예제 출력 1
2/4
풀이
패턴 찾기 - 1
행과 분자가 같이 증가하고
열과 분모가 같이 증가한다.
n행 1열과 1행 n열을 제외한 나머지
대각선으로 분자나 분모가 서로 반대로 증감한다.
패턴 찾기 - 2
배열을 피라미드 형태로 기울 때
n 줄은 n개의 분수를 가진다.
또한 n이 짝수일 경우 분자에 n
n이 홀수일 경우 분모에 n을 가진 분수로 시작하는 순서를 가진다.
풀이 -1
구해야 하는 값은 크게 2가지
1. 입력값의 n줄
2. n줄의 i번 째 분수인지
1번
줄은 n으로 하고 n은 0부터 시작한다
sum에 n을 더하는 과정이다.
입력값의 분수가 n줄이라는 것을 확인하기 위해서
n+1줄이 아니라는 것을 확인하는 과정을 추가했다.
2번
i=input-sum
n줄에서 입력값의 분수의 순서는 i이다
그러나 반복문은 i-1 만큼 실행해야 하기 때문에
i=input-sum-1
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
31
32
33
34
35
36
37
38
39
40
|
#include <stdio.h>
int main(){
int n=0; //input의 분수가 존재하는 n
int sum=0;
int input;
scanf("%d",&input);
while(1){
sum+=n;
if(sum+n+1>=input) break;
n++;
}
int i=input-sum-1; //반복문 조건
int up;
int down;
if(n%2==0){
up=1;
down=n;
for(int j=0; j<i; j++){
up++;
down--;
}
}
else{
up=n;
down=1;
for(int j=0; j<i; j++){
up--;
down++;
}
}
printf("%d/%d\n",up,down);
return 0;
}
|
cs |
풀이-2
i는 줄 수
x는 입력값으로 사용할 수 있고
나중에 i번 째에 있는 분수의 자리 수를 나타낸다
x는 분수가 몇번 째 있는지 나타내지만 실제 반복 횟수는 x-1이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include <stdio.h>
int main(){
int x;
int i=1;
scanf("%d", &x);
while(1){
if(x-i<=0) break;
x-=i++;
}
int up;
int down;
if(i%2==0){
up=1+(x-1);
down=i-(x-1);
}
else{
up=i-(x-1);
down=1+(x-1);
}
printf("%d/%d",up,down);
return 0;
}
|
cs |
반응형
'Programming > Algorithm & Data Structure' 카테고리의 다른 글
[python] Data Structure Linear Queue 자료구조 선형 큐 (0) | 2021.06.23 |
---|---|
[Python] Data Structure Stack 자료구조 스택 (0) | 2021.06.23 |
[C] <BAEKJOON> 백준 1712번 : 손익분기점 (0) | 2020.11.16 |
[C] <암호수학> 확장 유클리드 알고리즘 (0) | 2018.04.02 |
[C] <자료구조> 삽입 정렬 알고리즘 insertion sort 시간 복잡도 (0) | 2018.03.27 |