2022년 7월 28일에 작성됨
https://school.programmers.co.kr/learn/courses/30/lessons/12977
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 분석
서로 다른 세 수의 합이 소수인지 판단하고, 소수가 되는 경우의 개수를 반환한다.
<소수>
1과 자기 자신만을 약수로 가지는 수
소스 코드 (⭕)
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// nums_len은 배열 nums의 길이입니다.
int solution(int nums[], size_t nums_len) {
int answer = 0;
int sum = 0;
for (int i = 0; i < nums_len; i++) { // 배열에서 숫자 3개 고르는 반복문
for (int j = i + 1; j < nums_len; j++) {
for (int k = j + 1; k < nums_len; k++) {
sum = nums[i] + nums[j] + nums[k]; // 중복되지 않은 3가지 숫자의 합
int count = 0; // sum의 약수의 개수 구할 변수
for (int h = 2; h < sum; h++) { // 약수의 개수를 구하는 반복문
if (sum % h == 0)
count++;
}
if (count == 0) // 약수의 개수가 0일 때 answer++
answer++;
}
}
}
return answer;
}
코드 분석
1. for 반복문을 이용하여 배열 nums에 있는 숫자가 겹치지 않게 3개의 수를 구한다.
2. 구한 3개의 수의 합을 sum에 담는다.
ex) nums이 [1, 2, 3, 4]이면, nums_len = 4가 된다.
첫 번째: i=0, j=1, k=2 / sum = nums[0] + nums[1] + nums[2] = 1 + 2 + 3 = 6
두 번째: i=1, j=2, k=3 / sum = nums[1] + nums[2] + nums[3] = 2 + 3 + 4 = 9
세 번째: i=2, j=3, k=4 에서 k < nums_len 조건식이 만족하지 못하므로 반복문은 끝난다.
3. sum을 1과 자기 자신을 제외한 범위의 수 h로 나눈 나머지가 0이면
그 h가 sum의 약수가 되고, 약수의 개수만큼 count++를 해준다.
4. 마지막 if문에서 count가 0이면, sum은 소수이기 때문에 answer++로 소수의 개수를 구하고 값을 반환한다.
end
혼자 풀기엔 어려워서 다른 분들의 코드를 참고했다.
처음엔 코드를 봐도 이해가 되지 않아서 힘들었지만 천천히 분석 하다보니 이해가 됐다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[Python]프로그래머스_Lv1 : 부족한 금액 계산하기 (0) | 2023.05.16 |
---|---|
[Python]프로그래머스_Lv1 : 나머지가 1이 되는 수 찾기 (0) | 2023.05.16 |
[Python]프로그래머스_Lv1 : 최소직사각형 (0) | 2023.05.15 |
[Python]프로그래머스_Lv1 : 짝수와 홀수 (0) | 2023.05.14 |
[C]프로그래머스_Lv1 : 2016년 (0) | 2023.05.14 |
2022년 7월 28일에 작성됨
https://school.programmers.co.kr/learn/courses/30/lessons/12977
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 분석
서로 다른 세 수의 합이 소수인지 판단하고, 소수가 되는 경우의 개수를 반환한다.
<소수>
1과 자기 자신만을 약수로 가지는 수
소스 코드 (⭕)
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// nums_len은 배열 nums의 길이입니다.
int solution(int nums[], size_t nums_len) {
int answer = 0;
int sum = 0;
for (int i = 0; i < nums_len; i++) { // 배열에서 숫자 3개 고르는 반복문
for (int j = i + 1; j < nums_len; j++) {
for (int k = j + 1; k < nums_len; k++) {
sum = nums[i] + nums[j] + nums[k]; // 중복되지 않은 3가지 숫자의 합
int count = 0; // sum의 약수의 개수 구할 변수
for (int h = 2; h < sum; h++) { // 약수의 개수를 구하는 반복문
if (sum % h == 0)
count++;
}
if (count == 0) // 약수의 개수가 0일 때 answer++
answer++;
}
}
}
return answer;
}
코드 분석
1. for 반복문을 이용하여 배열 nums에 있는 숫자가 겹치지 않게 3개의 수를 구한다.
2. 구한 3개의 수의 합을 sum에 담는다.
ex) nums이 [1, 2, 3, 4]이면, nums_len = 4가 된다.
첫 번째: i=0, j=1, k=2 / sum = nums[0] + nums[1] + nums[2] = 1 + 2 + 3 = 6
두 번째: i=1, j=2, k=3 / sum = nums[1] + nums[2] + nums[3] = 2 + 3 + 4 = 9
세 번째: i=2, j=3, k=4 에서 k < nums_len 조건식이 만족하지 못하므로 반복문은 끝난다.
3. sum을 1과 자기 자신을 제외한 범위의 수 h로 나눈 나머지가 0이면
그 h가 sum의 약수가 되고, 약수의 개수만큼 count++를 해준다.
4. 마지막 if문에서 count가 0이면, sum은 소수이기 때문에 answer++로 소수의 개수를 구하고 값을 반환한다.
end
혼자 풀기엔 어려워서 다른 분들의 코드를 참고했다.
처음엔 코드를 봐도 이해가 되지 않아서 힘들었지만 천천히 분석 하다보니 이해가 됐다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[Python]프로그래머스_Lv1 : 부족한 금액 계산하기 (0) | 2023.05.16 |
---|---|
[Python]프로그래머스_Lv1 : 나머지가 1이 되는 수 찾기 (0) | 2023.05.16 |
[Python]프로그래머스_Lv1 : 최소직사각형 (0) | 2023.05.15 |
[Python]프로그래머스_Lv1 : 짝수와 홀수 (0) | 2023.05.14 |
[C]프로그래머스_Lv1 : 2016년 (0) | 2023.05.14 |