[프로그래머스 Level_1] - #1
소수만들기
문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
입출력 예
nums result
[1,2,3,4] 1
[1,2,7,6,4] 4
문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
입출력 예
nums result
[1,2,3,4] 1
[1,2,7,6,4] 4
처음 문제를 접했을 때, 아래와 같은 핵심 요소를 코드로 녹여야 한다고 생각했다.
문제의 핵심 요소
- 서로 다른 숫자 중 3개씩 고른 모든 경우의 수
- 소수 구하는 알고리즘
서로 다른 숫자 중 3개씩 고른 모든 경우의 수
시간 복잡도를 최대한 줄이고 싶어서 이중 포문으로 작성했지만 3중 포문밖에 답을 못구할 거 같에서 아래와 같이 작성했다.
for(int i = 0 ; i < nums.length-2; i++) { for(int j = i+1 ; j < nums.length-1; j++) { for(int k = j+1; k < nums.length; k++) { int sum = nums[i] + nums[j] + nums[k]; } } } ``
소수 구하는 알고리즘
public boolean isprime(int num) { for(int i = 2; i < num; i++) { if( num % i == 0) return false; // 소수 } return true; // 소수 아님 }
소수는 자기자신과 1 이외에는 어떠한 정수든 나뉘어 떨어지지 않는 수이기 때문에 위와 같이 작성을 했다.
코드
class Solution {
public int solution(int[] nums) {
int cnt = 0;
for(int i = 0 ; i < nums.length-2; i++)
{
for(int j = i+1 ; j < nums.length-1; j++)
{
for(int k = j+1; k < nums.length; k++)
{
int sum = nums[i] + nums[j] + nums[k];
if (isprime(sum) == true)
cnt++;
}
}
}
return cnt;
}
public boolean isprime(int num)
{
for(int i = 2; i < num; i++)
{
if( num % i == 0)
return false; // 소수아님
}
return true; // 소수
}
}
느낀점
class Solution {
public int solution(int[] nums) {
int cnt = 0;
for(int i = 0 ; i < nums.length-2; i++)
{
for(int j = i+1 ; j < nums.length-1; j++)
{
for(int k = j+1; k < nums.length; k++)
{
int sum = nums[i] + nums[j] + nums[k];
if (isprime(sum) == true)
cnt++;
}
}
}
return cnt;
}
public boolean isprime(int num)
{
for(int i = 2; i < num; i++)
{
if( num % i == 0)
return false; // 소수아님
}
return true; // 소수
}
}
그렇게 어렵지 않은 난이도 인데도 불구하고 소수 개념에서 살짝 헷갈려서 시간이 걸린게 아쉽다.
지금이라도 개념을 확실히 잡아서 다행이다!! 😋
Author And Source
이 문제에 관하여([프로그래머스 Level_1] - #1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bumseo/프로그래머스Level1-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)