-
https://programmers.co.kr/learn/courses/30/lessons/42839
프로그래머스 소수찾기 문제입니다.
#include <string> #include <vector> #include <bitset> using namespace std; string num, paper; int len; int cnt; vector<int> nums; bool use[7]; bitset<(1 << 25)> bit; bool isPrime(int n) { if (n < 2) return false; for (int i = 2; i*i <= n; i++) { if (n%i == 0) return false; } return true; } void dfs(int n) { if (n == len) return; for (int i = 0; i < len; i++) { if (use[i]) continue; num += paper[i]; if (bit[stoi(num)]) if (isPrime(stoi(num))) cnt++; use[i] = true; bit[stoi(num)] = 0; dfs(n + 1); use[i] = false; num.pop_back(); } } int solution(string numbers) { fill(use, use + 7, false); bit.set(); paper = numbers; len = paper.length(); for (int i = 0; i < len; i++) dfs(0); int answer = cnt; return answer; }
아이디어
완전탐색문제에 숫자를 사용해서 이전에 써봤던 bitset을 이용하여 중복을 처리했고, DFS로 탐색, 소수 검사 부분은 에라토스테네스의 체를 이용했음
주의점은 i*i<n -> i*i<=n 실수하면 틀린곳 찾기가 힘들어짐
'알고리즘 > 프로그래머스' 카테고리의 다른 글
2020 카카오 인턴쉽 코딩테스트 2번 수식 최대화 (0) 2022.06.01 2017 카카오 블라인드 코딩테스트 5번 뉴스 클러스터링 (0) 2022.05.01 Programers 프린터 (0) 2022.03.12 Programers 기능개발 (0) 2022.03.12 Programers 도둑질 (0) 2022.03.12 댓글