Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- multi-task learning
- 백준 2193
- 프로그래머스 여행경로
- cs231
- 웹 독학
- 알고리즘
- 리멤버나우
- git password
- flaks
- 장영준
- 이베이 매각
- 프로그래머스
- 경제 요약
- aws rds
- C++
- 2003 에러
- Convolutional Neural Networks
- 110 옮기기
- 미국 이란 전쟁
- 딥러닝
- 리멤버나우 요약
- pytorch-tutorial
- but how?
- 2003 error
- 오픈소스
- git-lfs
- 코딩테스트
- flask
- 스무고개 Metric
- 뤼이드
Archives
- Today
- Total
Nam's
[백준 2193] 이친수 (DP 동적프로그래밍) 본문
https://www.acmicpc.net/problem/2193
2193번: 이친수
0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않는다. 이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다. 예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만 0010101이나 101101은 각각 1, 2번 규칙에 위배되
www.acmicpc.net
이번 문제도 먼저 떠오른 방법은 DFS (깊이 우선 탐색) 이었다.
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
|
#include <iostream>
using namespace std;
int N;
int arr[91];
long long count = 0;
void one(int i);
void zero(int i);
int main() {
cin >> N;
one(N);
cout << count;
}
void zero(int i){
arr[i] = 0;
if(i==1) count++;
else{
zero(i-1);
one(i-1);
}
}
void one(int i){
arr[i] = 1;
if(i==1) count++;
else{
zero(i-1);
}
}
|
하지만 시간초과로 실패했다.
DP로 문제를 푸는 방법을 구글링 하면서 힌트를 얻고 다시 코드를 짰다.
이번에는 틀렸습니다가 떴는데, 30분 정도 고민하고 알아낸 문제는 int 였다.
long long 으로 바꿔주니까 해결.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include <iostream>
using namespace std;
int main() {
long long N;
long long arr[91][2];
cin >> N;
arr[N][0] = 0;
arr[N][1] = 1;
for(int i = N - 1; i > 0; i--){
arr[i][0] = arr[i+1][0] + arr[i+1][1];
arr[i][1] = arr[i+1][0];
}
cout << arr[1][0] + arr[1][1];
}
|
이런 식으로 글을 쓰면 다른 사람은 고사하고 나한테도 별로 도움이 안될 것 같아서 고민이다.
하지만 깔끔하게 쓰는 정성을 들이기는 너무 귀찮고 시간이 아깝다.
'개발 > Coding Test' 카테고리의 다른 글
[백준 1463] 1로 만들기 (Dynamic Programming) (0) | 2019.12.29 |
---|
Comments