첫번째 - 주사위의 개수
머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box와 주사위 모서리의 길이 정수 n이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요.
입출력 예
| box | n | result |
| [1, 1, 1] | 1 | 1 |
| [10, 8, 6] | 3 | 12 |
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// box_len은 배열 box의 길이입니다.
int solution(int box[], size_t box_len, int n) {
int answer = 1;
int i;
for(i=0;i<box_len;i++)
answer *= box[i]/n;
return answer;
}
가로, 세로, 높이의 값을 각각 n으로 나눴을 때의 몫을
모두 곱해주면 된다.
두번째 - 합성수 찾기
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
입출력 예
| n | result |
| 10 | 5 |
| 15 | 8 |
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n) {
int answer = 0;
int count=0;
int i, j;
for(i=4;i<=n;i++){
count = 0;
for(j=1;j<=i;j++){
if(i%j==0)
count++;
}
if(count>=3)
answer++;
}
return answer;
}
바깥 반복문을 통해 n보다 작은 숫자를 1씩 증가시키고
안쪽 반복문을 통해 i가 소수인지 합성수인지 판단해주면 된다.
i는 가장 작은 합성수인 4부터 시작한다.
j가 i의 약수이면 count가 하나씩 증가하여
반복문이 끝난 후 count가 3이상일때 합성수로 판단하여
answer를 하나 증가시킨다.
세번째 - 최댓값 만들기(1)
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
입출력 예
| numbers | result |
| [1, 2, 3, 4, 5] | 20 |
| [0, 31, 24, 10, 1, 9] | 744 |
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// numbers_len은 배열 numbers의 길이입니다.
int solution(int numbers[], size_t numbers_len) {
int answer = 0;
int i, max=-99, maxIndx;
for(i=0;i<numbers_len;i++)
if(numbers[i]>max){
max=numbers[i];
maxIndx=i;
}
answer = max;
max=-99;
for(i=0;i<numbers_len;i++)
if(numbers[i]>max && maxIndx!=i)
max=numbers[i];
answer *= max;
return answer;
}
배열에서 가장 큰 수와 두번째로 큰 수를 구해주면 된다.
처음에는 가장 큰 수를 구해주고,
가장 큰 수의 인덱스를 저장해 뒀다가
두번째 반복문에서는
이 인덱스를 제외한 인덱스 중에서
가장 큰 수를 구해주면 된다.
두 수를 곱한 후 리턴한다.
네번째 - 팩토리얼
i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.
- i! ≤ n
제한사항
- 0 < n ≤ 3,628,800
입출력 예
| n | result |
| 3628800 | 10 |
| 7 | 3 |
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n) {
int answer = 0;
int i, j;
unsigned int total;
for(i=10;i>0;i--){
total=1;
for(j=2;j<=i;j++)
total*=j;
if(total<=n){
answer=i;
break;
}
}
return answer;
}
제한사항이 n이 3628800 이하여야 하므로
i의 최댓값은 10이다.
그러므로 10에서부터 하나씩 값을 줄여가며
팩토리얼값(total)을 구해 n과 비교후
total이 n보다 작아졌을때 i값을 리턴해주면 된다.
'프로그래머스 코딩테스트' 카테고리의 다른 글
| 프로그래머스 코딩테스트 입문 DAY12 (1) | 2024.02.06 |
|---|---|
| 프로그래머스 코딩테스트 입문 DAY10 (1) | 2024.02.06 |
| 프로그래머스 코딩테스트 입문 DAY9 (2) | 2024.02.05 |
| 프로그래머스 코딩테스트 입문 DAY8 (0) | 2024.02.04 |
| 프로그래머스 코딩테스트 입문 DAY7 (1) | 2024.02.04 |