-
[프로그래머스/Level 2] k진수에서 소수 개수 구하기알고리즘 문제풀이/프로그래머스 2022. 10. 10. 17:13
https://school.programmers.co.kr/learn/courses/30/lessons/92335
카카오 기출
입력받은 숫자 n을 k진수로 변환하는 것은 어렵지 않다. 그러나 주의해야 할 점이 두 가지 존재한다.
1. k진수로 변환된 수가 int의 범위를 벗어날 수 있다.
2. 단순히 2부터 k진수로 변환된 수 - 1 값을 하나씩 체크하며 소수 여부를 판단하면 TLE 발생할 수 있다.
(아마 1번 TC에서 TLE이 발생할 것이다.)1번은 long long 타입을 사용함으로써 해결할 수 있고, 2번은 제곱근 수만큼만 비교하면 시간을 단축시켜 해결할 수 있다.
#include <string> #include <vector> #include <algorithm> #include <sstream> #include <iostream> using namespace std; typedef long long ll; bool isPrime(string token) { if(token == "" || token == "1") return false; ll num = stoll(token); for(ll i = 2; i * i <= num; i++) { if(num % i == 0) return false; } return true; } string convert(int n, int k) { string num = ""; while(1) { if(n == 0) break; num.insert(0, to_string(n % k)); n /= k; } return num; } int solution(int n, int k) { int answer = 0; string num = convert(n, k); stringstream ss(num); string token; while(getline(ss, token, '0')) { if(isPrime(token)) answer++; } return answer; }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level 1] 달리기 경주 (0) 2023.12.27 [프로그래머스/Level 1] 개인정보 수집 유효기간 (0) 2023.04.10 [프로그래머스/Level 1] 신고 결과 받기 (1) 2022.10.03 [프로그래머스/Level 3] 등산코스 정하기 (0) 2022.09.29 [프로그래머스/Level 2] 두 큐 합 같게 만들기 (1) 2022.09.24