복면산 문제 (C++)
문제
SEND + MORE = MONEY에 해당하는 복면산을 구하는 프로그램을 작성하시오.
(복면산은 문자를 이용하여 표현된 수식에서, 각 문자가 나타내는 숫자를 알아내는 문제이다.)
- 출력예시
풀이
각 문자가 나타내는 숫자를 알아내는 문제이다.
따라서 문제에 쓰이는 알파벳을 순서대로 두고, 각 알파벳에 번호를 부여하고 이를 배열로 생각하였다.
DEMNORSY
01234567
결국 0~9까지의 숫자중 위의 알파벳 배열에 해당하는 숫자를 찾아내는 것으로,
순열을 조합하는 문제로 생각하였다.
따라서 DFS로 풀이하였다.
main함수 부분을 시작점으로 한다. DFS의 Level은 0부터 시작한다고 생각
a배열 : 각 문자에 해당하는 숫자를 표시하기 위함이다.
ch배열 : 0~9까지의 숫자중 어떤것을 사용했는지 체크하기 위함이다.
#include <iostream>
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 Level) {
if(Level==8) { // 종료 조건
if(send() + more() == money()) {
if(a[6] == 0 || a[2] == 0) return;
// 숫자의 시작이 0이 되는 부분은 제외
// ex) MONEY와 MORE의 M & SEND의 S
else {
cout << " "<< a[6] << " " << a[1] << " " << a[3] << " " << a[0] <<"\n";
cout << "+ " << a[2] << " " << a[4] << " " << a[5] << " " << a[1] <<"\n";
cout << "-----------\n";
cout << a[2] << " " << a[4] << " " << a[3] << " " << a[1] <<" " << a[7] << "\n";
}
}
}
else {
for(int i=0; i<=9; i++) { // 0부터 9까지
if(ch[i]==0) { // 안썼다면
a[Level] = i; // 쓰고, a[Level]에 해당하는 숫자가 i라고 생각
ch[i] = 1; // 썼다고 체크
DFS(Level+1); // 다음 자리수로 이동
ch[i] = 0;
}
}
}
}
int main() {
DFS(0);
return 0;
}
- 결과 출력
Author And Source
이 문제에 관하여(복면산 문제 (C++)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@juwon9733/복면산-문제-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)