반응형
이번문제..
기업코테는 왠만하면 int를 쓰지 말고 long을 써야겠다. 숫자 범위를 넘어가기 때문이다.
이번 문제에서 배운 핵심은 두가지다.
1. C++에서 split 함수 구현하기
C++에선 split함수를 직접 구현해야한다.
stringstream과 getline함수를 이용하는데, 이건 연습을 틈틈이 해줘야 좋을 것 같음.
2. stoi 대신에 stol 써보기
stoi는 integer이며, stol이 long이다.
신경써야할게 생각보다 참 많다.. n의 범위는 1,000,000 이어서 int로 뭔가 충당될 것만 같지만
k진수로 바꾸는 과정에서 엄청나게 길어진 문자열이 되기 때문에 int로는 충당이 안되고 long으로 바꿔줘야 한다.
#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <algorithm>
using namespace std;
// k 진수로 바꾸고, 0을 split으로 해서 숫자를 만들면 됨.
bool isPrime(long number) {
if(number < 2)
return false;
for(long i = 2; i * i <= number; i++) {
if(number % i == 0)
return false;
}
return true;
}
vector<string> split(string str, char delimeter) {
vector<string> answer;
stringstream ss(str);
string temp;
while(getline(ss, temp, delimeter))
answer.push_back(temp);
return answer;
}
string makeNumber(int n, int k) {
string answer = "";
while(n > k) {
answer += to_string(n % k);
n /= k;
}
answer += to_string(n);
reverse(answer.begin(), answer.end());
return answer;
}
int solution(int n, int k) {
int answer = 0;
vector<string> list = split(makeNumber(n, k), '0');
for(auto x : list) {
if(x.length() > 0 && isPrime(stol(x)))
answer++;
}
return answer;
}
반응형
'[프로그래머스]' 카테고리의 다른 글
프로그래머스 행렬 테두리 회전하기 C++ (0) | 2023.09.20 |
---|---|
프로그래머스 양궁대회 C++ (0) | 2023.09.19 |
프로그래머스 혼자 놀기의 달인 C++ (1) | 2023.09.17 |
프로그래머스 디펜스 게임 C++ (0) | 2023.09.15 |
프로그래머스 이모티콘 할인행사 C++ (0) | 2023.09.08 |