Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- BFS
- kt에이블스쿨
- 코딩
- 코테
- 프로그래머스
- 알고리즘
- 스터디
- dfs
- Ai
- 코테공부
- 음수와 size 비교
- 미니프로젝트
- 모델링
- 에이블스쿨
- 크롤링
- Queue
- 상어중학교
- 코테연습
- 취준
- 코딩테스트
- 21609
- 코테준비
- 머신러닝
- map
- C++
- python
- 데이터전처리
- 개인정보수집유효기간
- 파이썬
- 백준
Archives
- Today
- Total
얼레벌레
[C++] 프로그래머스 - k진수에서 소수개수 구하기 (Lv.2) 본문
문제 설명
아이디어
0P0, P0, 0P, P 에 관한 설명들 모두 진법 변환 후 0을 기준으로 split 하라는 말이다.
그래서
- 진법 변환
- 0을 기준으로 split 해 배열에 담음
- 배열에 담은 것들을 소수인지 아닌지 판단해, 소수일 경우 answer+1 진행
순으로 코드를 짰다.
코드
#include <string>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
bool isPrime(long long n) {
if(n==0 || n==1) return false;
for(int i=2; i<=sqrt(n); i++){
if(n%i == 0)
return false;
}
return true;
}
int solution(int n, int k) {
int answer = 0;
string st;
// 진법 변환
while(n>0) {
st += to_string(n%k);
n /= k;
}
reverse(st.begin(), st.end());
vector<long long> arr;
string tmp = "";
for(int i=0; i<st.size(); i++){
if(st[i] == '0'){
if(!tmp.empty()) { //이거 빼면 core dumped
arr.push_back(stol(tmp));
}
tmp = "";
continue;
}
tmp += st[i];
}
if(!tmp.empty())
arr.push_back(stol(tmp));
// 소수 개수 세기
for(int i=0; i<arr.size(); i++){
if(isPrime(arr[i]))
answer+=1;
}
return answer;
}
주의할 점
- 진법 변환 후 reverse 필수.
- stol(tmp)으로 문자열 tmp를 long으로 바꿔줄 때 tmp 문자열이 비어있으면 안된다.
(stol 내부 로직을 확인해보니, 인자로 받은 string의 길이를 확인하지 않고 각 자리수의 char에 접근함)
'Coding > 코딩테스트 준비' 카테고리의 다른 글
[C++] 백준 #23291 어항정리 (1) | 2022.10.08 |
---|---|
[C++] 백준 #16234 인구이동 (0) | 2022.10.05 |
[C++] 프로그래머스 - 피로도 (Lv.2) (2) | 2022.09.13 |
[C++] 프로그래머스 - 카펫 (Lv.2) (0) | 2022.09.12 |
[C++] 프로그래머스 - 소수찾기 (Lv.2) (1) | 2022.09.11 |