https://www.acmicpc.net/problem/22251
처음에는 1->2, 1->3 이런 식으로 바꿀 때 몇 개 반전시켜야하는지 전부 계산해서 배열에 저장했는데 그냥 저 디스플레이 자체를 배열로 저장해놓고 비교하면 되는 거였다.
N 범위가 생각보다 큰 것 같아서 문자열로 숫자를 접근하려고 하니까 갑자기 확 어려워졌는데 그냥 단순하게 1부터 증가시키면서 비교해도 시간초과 안 남
✨ n=378일 때, n%10 먼저 해주고, n/=10 해주면 일의 자리부터 추출되는 거 잊지 않기!
#include <iostream>
using namespace std;
bool arr[10][7] = { {true, true, true, false, true, true, true}, //0
{false, false, true, false, false, false, true}, //1
{false, true, true, true, true, true, false}, //2
{false, true, true, true, false, true, true}, //3
{true, false, true, true, false, false, true}, //4
{true, true, false, true, false, true, true}, //5
{true, true, false, true, true, true, true}, //6
{false, true, true, false, false, false, true}, //7
{true, true, true, true, true, true, true}, //8
{true, true, true, true, false, true, true}}; //9
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, K, P, X;
int ans = 0;
cin >> N >> K >> P >> X;
for (int i = 1; i <= N; i++) {
int cnt = 0;
int from = X, to = i;
if (i == X) continue;
for (int j = 0; j < K; j++) {
for (int k = 0; k < 7; k++) {
if (arr[from % 10][k] != arr[to % 10][k]) cnt++;
}
from /= 10; to /= 10;
}
if (cnt <= P) ans++;
}
cout << ans;
return 0;
}