int ret(int n) {
if (n == 0) return 6; if (n == 5) return 5;
if (n == 1) return 2; if (n == 6) return 6;
if (n == 2) return 5; if (n == 7) return 4;
if (n == 3) return 5; if (n == 8) return 7;
if (n == 4) return 4; return 6;
}
int solve(int n) {
int answer = 0;
int rem = n;
int ans = 0; //값
for (int i = 0; i < 10; i++) {
rem = n - ret(i); //첫번째 숫자 넣고 남은 횟수
ans = i; //첫번째 값
//사칙연산
for (int j = 0; j < 4; j++) {
if (j == 0) {
rem -= 2;
for (int k = 0; k < 10; k++) {
rem -= ret(k); //두번째숫자 넣고 남은 횟수
ans += k; //첫번째 값+ 두번째값
for (int l = 0; l < 10; l++) {
//만일 나머지가, 값이 될 수 있는 것과 같고 등식 성립
if (rem == ret(l) && ans == l) {
answer++;
}
}
rem += ret(k);
ans -= k; //원래값 회복
}
rem += 2;
}
if (j == 1) {
rem -= 1;
for (int k = 0; k < 10; k++) {
rem -= ret(k); //두번째숫자 넣고 남은 횟수
ans -= k; //첫번째 값+ 두번째값
for (int l = 0; l < 10; l++) {
//만일 나머지가, 값이 될 수 있는 것과 같고 등식 성립
if (rem == ret(l) && ans == l) {
answer++;
}
}
rem += ret(k);
ans += k; //원래값 회복
}
rem += 1;
}
if (j == 2) {
rem -= 1;
for (int k = 1; k < 10; k++) {
rem -= ret(k); //두번째숫자 넣고 남은 횟수
int namuji = ans % k;
ans /= k; //첫번째 값 / 두번째값
for (int l = 0; l < 10; l++) {
//만일 나머지가, 값이 될 수 있는 것과 같고 등식 성립
if (rem == ret(l) && ans == l) {
answer++;
}
}
rem += ret(k);
ans = k * ans + namuji; //원래값 회복
}
rem += 1;
}
if (j == 3) {
rem -= 2;
for (int k = 0; k < 10; k++) {
rem -= ret(k); //두번째숫자 넣고 남은 횟수
ans *= k; //첫번째 값+ 두번째값
for (int l = 0; l < 10; l++) {
//만일 나머지가, 값이 될 수 있는 것과 같고 등식 성립
if (rem == ret(l) && ans == l) {
answer++;
}
}
rem += ret(k);
ans = i; //원래값 회복
}
rem += 2;
}
}
}
return answer;
}
'성우리뷰' 카테고리의 다른 글
C++ prev_permutation 통한 모든 조합 넣기 (0) | 2021.10.27 |
---|---|
구조체 우선순위큐 넣고 정렬 & vector pair의 정렬 (0) | 2021.10.27 |
14500 중첩이용 풀이 (5) | 2021.10.19 |
bfs를 이용해 인접한 1끼리 묶어 사이즈 보기 (0) | 2021.10.18 |
19238 bfs 이용해 가장 가까운 곳 찾아가기 필수 공부 (0) | 2021.10.18 |