Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 레벨3
- 완전탐색
- Map
- 삼성
- 이런게4문제
- dfs
- C++
- 백준
- 코딩스킬
- 삼성SW테스트
- 2018
- KAKAO
- 프로그래머스
- Set
- 시뮬레이션
- dp
- 레벨2
- 백트래킹
- substr
- 코딩테스트
- BFS
- 삼성SW역량테스트
- priority_queue
- swea
- 문자열
- 브루트포스
- 모의SW역량테스트
- find
- STL
- Sort
Archives
- Today
- Total
-
[프로그래머스] 레벨 2 - 소수 찾기 본문
완전 탐색 문제다.
접근법을 dfs로 백트래킹하여 찾아보려 했으나 '순차적인' 문자열만 만들 수 있어 풀이가 어려웠다.
길이가 1부터 전체 사용하는 문자열을 만들 수는 있지만, numbers로 "17"이 주어졌을 때
"1", "7", "17"은 만들 수 있지만 "71"은 만들 수 없다.
그래서 다른 방법을 생각해봤다.
"주어진 숫자를 내림차순하고 각 숫자를 이루는 숫자가 몇 번 등장하는지 배열을 써서 2부터 주어진 숫자까지 루프를 돌면서 그 숫자에 등장하는 숫자들이 배열의 요소 이하로 등장하는지 검사하고, 이것이 소수이면 answer++하자!"
즉, 내림차순하면 최대 범위를 구하게 되는 것이고, 2이상의 값부터 검사를 해서 유효한 숫자이면 소수검사를 하는 것이 알고리즘이다. 만약 1이하의 값이 numbers로 주어지면 그냥 0을 반환하도록 했다.
아래는 소스코드.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
#include <sstream>
using namespace std;
int cnt[10], tmp[10];
int solution(string numbers) {
int answer = 0;
for(int i=0; i<10; i++) {
cnt[i] = 0;
tmp[i] = 0;
}
sort(numbers.begin(), numbers.end(), greater<char>());
int maxval;
stringstream s_str(numbers);
s_str >> maxval;
if(maxval <= 1) return 0;
cnt[numbers[i]-'0']++;
tmp[numbers[i]-'0']++;
}
for(int i=2; i<=maxval; i++){
bool cannotmake=false;
ostringstream ostr;
ostr << i;
cnt[curstr[j]-'0']--;
if(cnt[curstr[j]-'0'] < 0){
cannotmake = true;
break;
}
}
if(!cannotmake){
// i는 만들 수 있는 숫자임. i가 소수인지 검사.
bool isPrime = true;
for(int j=2; j<i-1; j++){
if(i % j == 0) {
isPrime = false;
break;
}
}
if(isPrime) answer++;
}
else{
// 만들 수 없는 숫자.
}
for(int j=0; j<10; j++)
cnt[j] = tmp[j];
}
return answer;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
'1-4. 프로그래머스' 카테고리의 다른 글
[프로그래머스] 레벨 2 - 카펫 (0) | 2020.02.07 |
---|---|
[프로그래머스] 레벨 2 - H-Index (0) | 2020.02.07 |
[프로그래머스] 레벨 2 - 전화번호 목록 (0) | 2020.02.07 |
[프로그래머스] 레벨 2 - 숫자 야구 (0) | 2020.02.06 |
[프로그래머스] 레벨 2 - 위장 (0) | 2020.02.06 |
Comments