티스토리 뷰
복면산 문제
#include <iostream>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int a[10], ch[10];
int send() {
return a[6]*1000+a[1]*100+a[3]*10+a[0];
}
int more() {
return a[2]*1000+a[4]*100+a[5]*10+a[1];
}
int money() {
return a[2]*10000+a[4]*1000+a[3]*100+a[1]*10+a[7];
}
void DFS(int L) {
if(L==8) {
if(send()+more()==money()){
if(a[2] == 0 || a[6] == 0) return;
printf(" %d %d %d %d\n", a[6], a[1], a[3], a[0]);
printf("+ %d %d %d %d\n", a[2], a[4], a[5], a[1]);
printf("---------\n");
printf("%d %d %d %d %d\n", a[2], a[4], a[3], a[1], a[7]);
}
}
else {
for(int i=0; i<10; i++){
if(ch[i]==0){
a[L]=i;
ch[i]=1;
DFS(L+1);
ch[i]=0;
}
}
}
}
int main() {
//freopen("input.txt", "rt", stdin);
DFS(0);
return 0;
}
** 복면산이란
복면산 문제는 특별한 언급이 없는 한, 같은 문자는 같은 숫자를 나타내고 서로 다른 문자는 서로 다른 숫자를 나타내는 것으로 생각하며, 첫 번째 자리의 숫자는 0이 아니라고 가정하는 것이 보통이다. 또한, 대개의 경우 복면산 문제의 답은 유일해야 한다.
위의 정의에 따라서 a배열에 SEND, MORE, MONEY에 포함되는 문자를 하나씩 정의해둔다.
그 후 send, more, money문자에 해당하는 a배열의 값에 따라 숫자를 도출하는 함수를 하나씩 선언한다.
그런다음 하나씩 조합해가며 순열을 만들어준다.
a배열에 하나씩 숫자를 배치하면서 DFS를 통해 가지를 뻗어나간다.
a배열에 지정한 문자에 숫자를 하나씩 배정하면 배정된 숫자를 프린트해준다.
'lecture > algorithm - c++' 카테고리의 다른 글
[c++] 수식만들기(DFS) (0) | 2021.01.24 |
---|---|
[c++] 피자배달거리(DFS활용) (0) | 2021.01.24 |
[c++] 휴가(DFS활용) (0) | 2021.01.24 |
[c++] 순열구하기(DFS: Depth First Search) (0) | 2021.01.22 |
[c++] 원더랜드(Kruskal MST, Prim MST 알고리즘) (0) | 2021.01.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 배열
- 인접리스트
- 구조체
- 인접행렬
- 클래스
- 스텍
- 이진탐색
- 소프트웨어
- 퀵정렬
- 입출력장치
- 알고리즘
- C++
- client side rendering
- 최단경로
- Java
- javascript
- 운영체제
- 병행프로세스
- BFS
- Stack
- 자료구조
- 교착상태
- stackframe
- 세마포어
- server side rendering
- dfs
- 재귀함수
- 동적프로그래밍
- react
- C
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함