-
[PS] 백준 13908번: 비밀번호문제해결 2023. 11. 2. 00:30
브루트포스문제에 어느정도 자신감이 붙은 상태였는데
실버문제에 별안간 꺾여버렸다.
제한이 생각보다 많이 타이트했던 것...
아래 코드블럭 중 1번 코드블럭으로 아무리 제출해도 TLE가 나던데,
아무리 생각해도 실버 브루트포스문제가 이것보다 더 어려울 것 같지가 않아서 궁리를 했다.
결국 문제를 찾았는데
if (!flag0) return;
이자식. 이자식으로 쓸모없는 탐색을 스킵해줘야한다!
if (str.find(c) == string::npos)
앞으로는 그냥 깔끔하게 이걸 쓰자...
string::npos 기억해두자!!
#include <bits/stdc++.h> using namespace std; #define endl "\n" #define FOR(i, N) for (int i = 0; i < int(N); i++) #define FORL(e, S) for (auto& e : S) vector<char> essentials; int n, m; int ans = 0; void solve(string &str) { bool flag0 = true; FORL(c, essentials) { bool flag = false; FORL(c2, str) { if (c == c2) { flag = true; break; } } flag0 = flag0 && flag; } if(flag0) ans += 1; } int main() { cin >> n >> m; FOR(i, m) { char input; cin >> input; essentials.push_back(input);} FOR(i, pow(10, n)) { string str = to_string(i); str.insert(0, n - str.length(), '0'); solve(str); } cout << ans << endl; return 0; }
#include <bits/stdc++.h> using namespace std; #define endl "\n" #define FOR(i, N) for (int i = 0; i < int(N); i++) #define FORL(e, S) for (auto& e : S) vector<char> essentials; int n, m; int ans = 0; void solve(string &str) { bool flag0 = true; FORL(c, essentials) { bool flag = false; FORL(c2, str) { if (c == c2) { flag = true; break; } } flag0 = flag0 && flag; if (!flag0) return; } if(flag0) ans += 1; } int main() { cin >> n >> m; FOR(i, m) { char input; cin >> input; essentials.push_back(input);} FOR(i, pow(10, n)) { string str = to_string(i); str.insert(0, n - str.length(), '0'); solve(str); } cout << ans << endl; return 0; }
'문제해결' 카테고리의 다른 글
[PS] 백준 1016번: 제곱 ㄴㄴ 수 (0) 2023.11.09 [PS] 백준 1882번: 분수 찾기, 30449번: Reafy 수열 (0) 2023.11.07 [PS] 백준 16455번: K번째 수 찾는 함수 (1) 2023.11.01 [PS] 백준 30446번: 회문수 (2) 2023.10.28 [PS] 백준 2749번: 피보나치 수 3 / 11444번: 피보나치 수 6 (0) 2023.10.26