첫번째 - 배열 자르기
정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.
입출력 예
| number | num1 | num2 | result |
| [1, 2, 3, 4, 5] | 1 | 3 | [2, 3, 4] |
| [1, 3, 5] | 1 | 2 | [3, 5] |
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// numbers_len은 배열 numbers의 길이입니다.
int* solution(int numbers[], size_t numbers_len, int num1, int num2) {
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
int* answer = (int*)malloc(numbers);
int i, j=0;
for(i=num1;i<=num2;i++){
answer[j]=numbers[i];
j++;
}
answer[j]='\0';
return answer;
}
answer의 인덱스를 따로 변수로 두고
number의 num1부터 num2까지를 answer에 넣어주면 된다
두번째 - 외계행성의 나이
우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.
입출력 예
| age | result |
| 23 | "cd" |
| 51 | "fb" |
| 100 | "baa" |
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
char* solution(int age) {
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
char* answer = (char*)malloc(sizeof(char)*4);
sprintf(answer, "%d", age);
for(int i=0;i<strlen(answer);i++)
answer[i] += 49;
return answer;
}
sprintf함수를 이용하여 age의 숫자를 answer에 문자열로 저장한다
* sprintf(저장될 위치, "포맷",포맷에 해당하는 데이터)
그리고 문자로 저장된 숫자를 알파벳으로 만들기 위해서 각 문자에 49씩 더한다
왜 49씩 더하는가?
그 이유는 바로 아스키코드에 있다!
아스키코드표를 보면 '0'이 48,
'a'가 97이기 때문에 '0'을 'a'로 바꿔주려면
97-48=49 만큼 더해줘야하기 때문이
세번째 - 진료순서 정하기
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
입출력 예
| emergency | result |
| [3, 76, 24] | [3, 1, 2] |
| [1, 2, 3, 4, 5, 6, 7] | [7, 6, 5, 4, 3, 2, 1] |
| [30, 10, 23, 6, 100] | [2, 4, 3, 5, 1] |
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// emergency_len은 배열 emergency의 길이입니다.
int* solution(int emergency[], size_t emergency_len) {
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
int* answer = (int*)malloc(emergency);
int i, j, maxIndx=0;
int n=1;
for(j=0;j<emergency_len;j++){
answer[j]=1;
for(i=0;i<emergency_len;i++)
if(emergency[j]<emergency[i])
answer[j]++;
}
return answer;
}
인덱스가 i, j 두가지가 있는데 같은 인덱스 번호를 같은 사람이라고 생각하자
중첩반복문을 사용하여 emergency의 i값과 j의 값을 비교했을 때
j가 i보다 작으면 j의 순서가 하나씩 뒤로 밀리는 것으로 표현해주면 된다
-> answer[j]의 값 하나씩 증가
네번째 - 순서쌍의 개수
순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.
입출력 예
| n | result |
| 20 | 6 |
| 100 | 9 |
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n) {
int answer = 0;
int i, count=0;
for(i=1;i<=n;i++){
if(n%i==0)
answer++;
}
return answer;
}
두 숫자의 곱이 n인 순서쌍의 개수를 구하라는 것은
n의 약수의 개수를 구하라는 것과 같은 의미이다
'프로그래머스 코딩테스트' 카테고리의 다른 글
| 프로그래머스 코딩테스트 입문 DAY10 (1) | 2024.02.06 |
|---|---|
| 프로그래머스 코딩테스트 입문 DAY9 (2) | 2024.02.05 |
| 프로그래머스 코딩테스트 입문 DAY7 (1) | 2024.02.04 |
| 프로그래머스 코딩테스트 입문 DAY6 (0) | 2024.02.04 |
| 프로그래머스 코딩테스트 입문 DAY5 (0) | 2024.02.04 |