Algorithm Study

[프로그래머스] K진수에서 소수 개수 구하기 / java

hyun-1200 2022. 5. 19. 20:57

https://programmers.co.kr/learn/courses/30/lessons/92335

 

코딩테스트 연습 - k진수에서 소수 개수 구하기

문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소

programmers.co.kr

 

뭐야 쉬운데? 했다가 끝에서 계속 버벅거렸던 문제 ^^ ..

계속 테스트케이스 1에서만 실패가 나서 넘 부글부글...🤯🤯🤯

테스트 케이스 1에서 계속 오류난다면 아래를 확인해보시길.. ! 

 

1. 해당 숫자가 소수인지 아닌지 판별하는 함수에서,

굳이 2부터 n까지 비교할 필요없고, n의 제곱근까지만 비교하면 된다. -> Math.sqrt(n) : 제곱근 구하는 함수 

그리구, 파라미터와 계산할때 Long으로 계산할것. 

추가로 제곱하는 함수 : Math.pow(i,n)  숫자 i에 n제곱  

ex.) 36 = 1,2,3,6,12,18,36.  -> 36의 경우 6 까지만 소수인지 아닌지만 판별해 보면 된다.  

 

 

숫자 n이 소수인지 구별하는 함수에서는, 2 부터 n의 제곱근까지만 확인해보면 된다. 

 

Math.sqrt(n)
Math.pow(i,n) 

 

제곱근 구하는 함수 헷갈려서 찾아봤는데, 다시 복습하려면  정수 제곱근 문제를 다시 풀어보자! 

https://programmers.co.kr/learn/courses/30/lessons/12934

 

코딩테스트 연습 - 정수 제곱근 판별

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함

programmers.co.kr

 


 

아래는 내가 제출한 풀이 방법.

 

1. 숫자 n을 k진수로 변환하는 함수 -> changeNum(int , int k)

2. k진수로 변환후 0 아닌 숫자 판별 -> split 함수 사용, 이때 0000 이 포함되어있는 경우 있을 수 있으므로 예외 구별해야함

   - 나 같은 경우는 isEmpty() 로 판단하였으나, length==0 으로 확인하여도 됨. 

3. 소수인지 아닌지 확인하는 함수 -> isPrime(Long n) 

 

 

 

 

 

다 제출하고나니 허무할 정도로 간단한 아래 코드가 있었따 ^^^^^^... 

난 한 80줄 되는데 20줄로 짜셨네 ~ 🤭🤭 

 그 이유를 살펴보니, 나는 n을 k 진수로 변경하는 함수를 따로 구현했는데,

Integer.toString(int n, int k) 처럼 내장된 함수를 쓸 수 있었다. ( 전 혀  몰랐음)

또 한번 이마를 탁 치고 갑니다.! 

 

오늘도 화이팅 💪🏻