성우리뷰
엘리베이터 숫자 표지판 사칙연산
두원공대88학번뚜뚜
2021. 10. 24. 21:14
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;
}