일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 구현
- 코딩테스트
- 스택
- 백준
- 부주상골수술후기
- 부주상골수술
- sql
- BFS
- 독일어독학
- SQLD
- SWIFT
- 카카오인턴십
- 세브란스
- 독학
- 리눅스
- IOS
- 분할정복
- istringstream
- DFS
- 코테
- 독일어
- 카카오인턴
- 롯데정보통신
- 프로그래머스
- 카카오코테
- c++
- 부주상골
- ChatGPT
- dp
- 부주상골증후군
Archives
- Today
- Total
슈뢰딩거의 고등어
[2022 Kakao blind recruitment] k진수에서 소수개수 구하기 본문
https://programmers.co.kr/learn/courses/30/lessons/92335
코딩테스트 연습 - k진수에서 소수 개수 구하기
문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소
programmers.co.kr
[풀이방법]
1. 진법 변환
2. 0을 기준으로 자른다.
3. 자른 수가 소수인지 판별한다.
4. 소수라면 answer++
* 주의해야 할 점 : n 의 최대가 1,000,000 이고 3진법으로 변환할 경우 long long 이라도 수를 다 커버하지 못한다.
따라서, string 에 담아둔 후 문자열을 0을 기준으로 자른다.
stoi() 가 아닌 stoll()을 사용하여 string 을 long long 으로 변환하여 소수인지 확인한다.
#include <string>
#include <vector>
using namespace std;
string convert(int n, int k) {
string res = "";
string reverse = "";
while(n != 0) {
res += to_string(n%k);
n /= k;
}
for(int i=res.size()-1; i>=0 ; i--)
reverse += res[i];
return reverse;
}
bool isPrime(long long n) {
if(n < 2)
return false;
for(long long i=2; i*i <= n; i++) {
if(n % i == 0)
return false;
}
return true;
}
int solution(int n, int k) {
int answer = 0;
string str_n = convert(n, k);
string tmp = "";
for(int i=0; i<=str_n.size(); i++) {
if(i == str_n.size() || str_n[i] == '0') {
if(tmp!="" && isPrime(stoll(tmp)))
answer++;
tmp = "";
}
else
tmp += str_n[i];
}
return answer;
}
'알고리즘' 카테고리의 다른 글
[2021 카카오 채용형 인턴십] 표 편집 (lv 3) (0) | 2022.04.07 |
---|---|
[2021 카카오 채용연계형 인턴십] 거리두기 확인하기 (lv2) (0) | 2022.04.05 |
[2021 Kakao blind recruitment] 메뉴 리뉴얼 (0) | 2022.03.23 |
[2022 Kakao blind recruitment] 주차 요금 계산 (0) | 2022.03.23 |
[2022 Kakao blind recruitment] 신고 결과 받기 (0) | 2022.03.23 |
Comments