[빈칸] 문제
문제1) 최대한 많은 쌍의 장갑 갯수 구하기
문제 설명: 번호가 1부터 10까지 있는 장갑이 있다. 왼쪽 장갑과 오른쪽 장갑이 짝이 모두 맞지 않는 상황이다. 이 상황에서 번호가 똑같은 쌍을 찾아 최대한 몇 쌍의 장갑을 구할 수 있을지 알아보자
정답💌
int* func_a(int gloves[], int gloves_len){
int* counter = (int*)malloc(sizeof(int)*(max_product_number + 1));
for(int i = 0; i <= max_product_number; ++i)
counter[i] = 0;
for(int i = 0; i < gloves_len; ++i)
counter[i]++;
return counter;
}
정리💥
- 장갑 번호에 따른 방에 +1씩 해주면 번호별로 장갑이 몇개 있는지 알 수 있다
- 최대 몇 쌍인지는 solution에서 계산한다
문제2) 더 많은 배수 구하기
문제 설명: 주어진 배열에서 3과 5, 어느 숫자의 배수가 더 많이 들어있는지 알아내자
정답💌
char* solution(int arr[], int arr_len) {
int count_three = func_c(arr, arr_len);
int count_five = func_a(arr, arr_len);
char* answer = func_b(count_three, count_five);
return answer;
}
정리💥
- fun_a() : 5의 배수 카운트
- fun_b() : 3의 배수 갯수와 5의 배수 갯수 비교하여 더 큰 값 출력
- fun_c() : 3의 배수 카운트
[구현] 문제
문제3) 짝수들의 제곱의 합 구하기
문제 설명: N부터 M 사이에 있는 숫자들 중, 짝수들의 제곱을 모두 더해보자
정답💌
int solution(int N, int M) {
int answer = 0;
for(int i = N; i<=M; i++){
if(i%2==0) answer += i*i;
}
return answer;
}
정리💥
- i는 N부터 M까지 반복
- 짝수라면 answer에 제곱해서 더한다
문제4) 5글자 이상인 단어 배열하기
문제 설명: 주어진 배열에서 5글자 이상인 문자열 요소끼리만 더해보자
정답💌
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
char* solution(char* words[], int words_len) {
char* answer = "";
answer = malloc(words_len*sizeof(char));
for(int i = 0; i<words_len; i++){
if(strlen(words[i])>=5) strcat(answer, words[i]);
}
if(!strcmp(answer,"")) return "empty";
else return answer;
}
정리💥
- answer이라는 주소값을 알고 있기 때문에 꼭 solution함수 안에서 메모리 해제해주지 않아도 괜찮다
- answer에 (배열의 길이)*(char 데이터형의 크기)로 메모리를 동적할당해준다
- for문으로 배열의 요소를 순환하며 문자열의 길이가 5인 요소들은
- strcat() 함수를 이용해 answer에 추가해준다
- 반복문을 벗어났는데도 answer이 빈 문자열이라면 "empty"를 return해준다
- 아니라면 answer retun
[빈칸] 문제
문제5) 몬스터 공격하기
문제 설명: 게임 캐릭터가 공격 몇 번만에 몬스터를 죽일 수 있을지 알아내자
정답💌
int solution(int attack, int recovery, int hp) {
int count = 0;
while(true){
count += 1;
hp -= attack;
if(hp <= 0)
break;
hp += recovery;
}
return count;
}
정리💥
- while문이 한 번 반복될때마다 공격 횟수 +1
- ------------------------------------------------------------
- 몬스터의 hp는 캐릭터의 attack만큼 줄어들고
- recovery만큼 회복된다
- ------------------------------------------------------------
- hp가 0보다 작아졌다면 반복문을 종료하고
- 캐릭터의 공격 몇 번만에 죽었는지 반환한다
문제6) 엘레베이터의 총 이동거리 구하기
문제 설명: 엘레베이터가 하루 동안 얼마나 층을 이동했는지 구한다
정답💌
int solution(int floors[], int floors_len) {
int dist = 0;
for(int i = 1; i<floors_len; ++i){
if(floors[i]>floors[i-1])
dist += floors[i] - floors[i-1];
else
dist += floors[i-1] - floors[i];
}
return dist;
}
정리💥
- if문 안에서 [ i ]와 [ i - 1 ]를 비교하기 때문에 i는 1부터 시작해주면 된다
문제7) 섭씨, 화씨 온도 바꾸기
문제 설명: 섭씨는 화씨로, 화씨는 섭씨 온도로 바꾼다
정답💌
int solution(int value, char* unit) {
int converted = 0;
if (unit[0] == 'C')
converted = (value * 1.8) + 32;
if (unit[0] == 'F')
converted = (value - 32) / 1.8;
return converted;
}
정리💥
- 연산자 우선순위가 -보다 /이 더 높기 때문에
- 괄호()를 사용해 -의 우선순위를 높여주어야한다
문제8) 소수의 갯수 구하기
문제 설명: 주어진 긴 숫자를 쪼개서 그 안에 소수가 몇개나 있는지 구해보자
정답💌
int solution(int number) {
int count = 0;
while(number >= 1){
int n = number % 10;
if (n == 2 || n == 3 || n == 5 || n == 7)
count += 1;
number /= 10;
}
return count;
}
정리💥
- while문의 조건을 number가 0인데도 한 번 더 반복하게 하면
- 긴 숫자에 없는 숫자(0)을 한 번 더 반복하게 되는 꼴이 된다
- 0이 되기 직전 숫자인 1까지만 반복을 허용해주자
문제9) 투표에 대한 후보 찾기
문제 설명: 특정 수만큼 표를 받은 후보가 몇명인지 찾아보자
정답💌
int solution(int votes[], int votes_len, int N, int K) {
//1번
int counter[11] = {0};
for(int i = 0; i < votes_len; ++i)
counter[votes[i]] += 1;
//2번
int answer = 0;
for(int i = 0; i <= N; ++i)
if(counter[i] == K)
answer += 1;
return answer;
}
정리💥
- 기호 몇 번에 몇명이 투표했는지, 해당하는 counter방에 카운트한다
- counter의 요소를 훑으며 K만큼 투표수를 받은 후보는 몇명인지 카운트한다
문제10) 상품권 총 지급액 구하기
문제 설명: 고객들이 각각 얼마나 구매했는지 들어있는 배열이 주어진다. 각 고객들에게 줄 상품권을 모두 더해 구한다.
정답💌
int solution(int purchase[], int purchase_len) {
int total = 0;
for(int i = 0; i < purchase_len; ++i){
if(purchase[i] >= 1000000)
total += 50000;
else if(purchase[i] >= 600000)
total += 30000;
else if(purchase[i] >= 400000)
total += 20000;
else if(purchase[i] >= 200000)
total += 10000;
}
return total;
}
정리💥
- 200000보다 클때라는 조건을 주지 않으면
- 400000보다 작은 모든 수가 total += 10000;를 하게 된다
수고하셨습니다 :)
문제 풀이에 오류가 있다면 알려주세요!
'COS pro 2급' 카테고리의 다른 글
| 구름 에듀 COS PRO 2급 C언어 1차 풀이 (0) | 2022.06.10 |
|---|---|
| 프로그래머스 COS Pro 2급 C 모의고사 파트3 문제풀이 (0) | 2022.06.03 |
| 프로그래머스 COS Pro 2급 C 모의고사 파트1 문제풀이 (0) | 2022.06.03 |
| 프로그래머스 COS Pro 2급 C 모의고사 파트2 문제풀이 (0) | 2022.06.03 |