티스토리 뷰
반응형
주어진 숫자들로 조합할 수 있는 숫자들 중 소수가 몇 개인지 찾는 문제
문제의 조건
1. string으로 변환된 숫자 numbers가 주어짐
2. numbers의 각 숫자들을 조합해서 만들 수 있는 숫자들 중 소수를 찾아서 카운트하기
3. 여기서 조합이 가능한 모든 경우를 탐색한 후 중복되는 숫자는 거르고 소수를 찾아야 함
순열을 찾아주는 함수가 있는줄 모르고 저것을 직접 구현하려다 피 봤는데...
next_permutation이라는.. 친절하게 모든 순열을 구해주는 함수가 있으니까 저걸 쓰자.
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
bool isPrimeNum(int num)
{
if (2 > num) return false;
//소수를 판별할 땐 2부터 제곱근까지만 계산해보면 된다.
int a = static_cast<int>(sqrt(num));
for (int i = 2; a >= i; i++)
{
if (0 == num % i) return false;
}
return true;
}
int solution(string numbers) {
int answer = 0;
//numbers 분해해서 한 조각씩 따로 저장
vector<char> pieces;
for (int i = 0; numbers.length() > i; i++)
pieces.emplace_back(numbers[i]);
//next_permutation 함수를 쓰려면 오름차순 정렬이 되어 있어야 함
sort(pieces.begin(), pieces.end());
vector<int> newNumbers;
//next_permutation 함수를 거치고 나면 벡터에 정렬된 순서가 다음 순열을 구하기 위한 순서로 바껴있음
//그래서 조합이 가능한 경우를 쉽게 구할 수 있다.
do {
string str = "";
for (int i = 0; pieces.size() > i; i++)
{
str += pieces[i];
newNumbers.emplace_back(stoi(str));
}
} while (next_permutation(pieces.begin(), pieces.end()));
//중복되는 숫자를 제거하기 위해 오름차순 정렬 후 unique 함수 실행
sort(newNumbers.begin(), newNumbers.end());
newNumbers.resize(unique(newNumbers.begin(), newNumbers.end()) - newNumbers.begin());
for (auto num: newNumbers)
{
if (isPrimeNum(num))
answer++;
}
return answer;
}
반응형
'알고리즘 문제 풀이' 카테고리의 다른 글
[C++] 프로그래머스 오픈채팅방 풀이 (0) | 2021.10.14 |
---|---|
[C++] 프로그래머스 카펫 풀이 (0) | 2021.10.13 |
[C++] 프로그래머스 베스트앨범 풀이 (0) | 2021.10.12 |
[C++] 프로그래머스 문자열 압축 풀이 (0) | 2021.10.12 |
[C++] 프로그래머스 행렬 테두리 회전하기 풀이 (0) | 2021.10.12 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 프로그래머스
- C언어기초
- c언어
- 컴퓨터공부
- 프로그래밍
- hackerrank
- 아이패드
- 캐나다생활
- DFS
- 알고리즘
- 캐나다
- 하드웨어
- 깊이우선탐색
- 문제풀이
- c++
- 스위프트플레이그라운드
- 기초
- 애플
- dp
- 백준
- greedy
- 해커랭크
- BFS
- 영어공부
- 너비우선탐색
- 컴퓨터
- 컴퓨터사이언스
- 다이나믹프로그래밍
- 코딩공부
- 그리디
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함