
👀 문제 : 전기 자동차를 사용하여 출발하는 도시를 포함하여 N개의 도시를 지나야한다. 이용할 자동차는 완충시 40km를 탈 수 있고 그 이후엔 충전을 해야한다. 완충 상태로 출발한 이후 도착할 때까지 몇 번 충전해야 하는지 구하기
#include <stdio.h>
int solution(int arr[], int N) {
int answer = 0;
int cnt = 0;
for (int i = 0; i < N; i++) {
answer += arr[i];
if (answer >= 40) {
cnt++;
answer -= 40;
}
}
return cnt;
}
int main() {
int arr[] = { 20,10,30,30 };
int n = 4;
int ret = solution(arr, n);
printf("배터리 충전 횟수 : %d\n", ret);
}
20
30
60 -> 충전
(60 - 40)
20
50 -> 충전

그림으로 간단하게 표현하자면 이런 느낌일 것이다.
👀 문제 : 어떤 편의점 개업 행사로 편의점 내 어떤 상품이든 3개를 사면 추가로 하나의 상품을 50% 할인된 가격으로 살 수 있고, 3개 미만 구매 시 적용 X
예를 들어 [100, 500, 300, 400, 300]인 상품을 가져온 경우 지불할 금액은 100 + 500 + 300 + (400 * 50%) + 300이다.
#include <stdio.h>
int solution(int arr[], int arr_len) {
int answer = 0;
int price = 0;
for (int i = 0; i < arr_len; i++) {
price = arr[i];
if (빈칸 % 4 == 0) {
price[빈칸];
}
answer += price;
}
return answer;
}
int main() {
int arr1[] = { 100, 500, 200, 400, 300 };
int arr_len1 = 5;
int ret1 = solution(arr1, arr_len1);
printf("가격 : %d", ret1);
int arr2[] = { 100, 500};
int arr_len2 = 2;
int ret2 = solution(arr2, arr_len2);
printf("가격 : %d", ret2);
}
#include <stdio.h>
int solution(int arr[], int arr_len) {
int answer = 0;
int price = 0;
for (int i = 0; i < arr_len; i++) {
price = arr[i];
if (arr_len % 4 == 0) {
price /= 2;
}
answer += price;
}
return answer;
}
int main() {
int arr1[] = { 100, 500, 200, 400, 300 };
int arr_len1 = 5;
int ret1 = solution(arr1, arr_len1);
printf("가격 : %d", ret1);
int arr2[] = { 100, 500};
int arr_len2 = 2;
int ret2 = solution(arr2, arr_len2);
printf("가격 : %d", ret2);
}
👀 문제 : 목재 사장은 길이 8인 목재만 취급, 주만받은 길이만큼 잘라 판매
예를 들어 길이 2, 6 으로 2개의 목재로 판매하거나, 길이 2로 4개 팔거나
목재 길이 개당 3,000원에 판매
#include <stdio.h>
#include <stdlib.h>
int func_a(int a[], int n, int length) {
for (int i = 0; i < n; i++) {
if (a[i] >= length) {
return i;
}
}
return -1;
}
int soltion(int N, int orders[], int orders_len) {
int* material = (int*)malloc(sizeof(int) * N);
int k = 0;
int price = 0;
for (int i = 0; i < N; i++) {
material[i] = 0;
}
for (int i = ; i < orders_len; i++) {
k = func_a(material, N, orders[i]);
if (k >= 0) {
material[k] -= orders[i];
price += 3000 * orders[i];
}
}
return price;
}
func_a 함수
1. 현재 목재 배열,현재 목재 개수, 목재 길이가 저장된 배열을 매개변수로 받는다.
2. 현재 목재 개수만큼 반복을 돌린다.
3. 만약 현재 목재 배열이 주문한 목재 배열 길이보다 짧으면 조각 가능한 목재 개수 리턴
#include <stdio.h>
#include <stdlib.h>
int func_a(int a[], int n, int length) {
for (int i = 0; i < n; i++) {
if (a[i] >= length) {
return i;
}
}
return -1;
}
int soltion(int N, int orders[], int orders_len) {
int* material = (int*)malloc(sizeof(int) * N);
int k = 0;
int price = 0;
for (int i = 0; i < N; i++) {
material[i] = 8; // 0이 아니라 사장이 취급하는 길이인 8로 해야함
}
for (int i = ; i < orders_len; i++) {
k = func_a(material, N, orders[i]);
if (k >= 0) {
material[k] -= orders[i];
price += 3000 * orders[i];
}
}
return price;
}
int main() {
int
}
👀 문제 : 영업사원이 지난 일 년간 모은 명합을 정리하려고 한다. 모아보니 다양한 명함이 많다. 그래서 전화번호만 모아 규칙으로 정리
규칙 1. 국가, 지역을 의마 X
규칙 2. 무조건 '0' 으로 시작
규칙 3. A-B-C 형식으로 3-4-4
예를 들어 공백인 곳을 -로 메꿔주거나 10으로 시작하는 번호 맨 앞에 0을 넣어준다거나 임의의 문자열number를 매개변수로 받아 미리 정학 형식의 문자열 return
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int func_a(char arr[], char src[]) {
int k = 0;
for (int i = 0; i < src[i] != 0; i++) {
if ('0' <= arr[i] && src[i] <= '9') {
arr[k++] = src[i];
}
}
arr[k] = 0;
return k;
}
char* solution(char num[]) {
char* copy = (char*)malloc(sizeof(char) * strlen(num) + 1);
char* answer = (char*)malloc(sizeof(char) * 14);
int k = 0;
if (num[0] != '0') {
copy[k++] = '0';
}
func_a(copy, num);
if (strlen(copy + 3) < 8) {
answer[4] = '0';
}
k = 0;
for (int i = 0; i < copy[i] != 0; i++) {
answer[k++] = copy[i];
if (k == 3 || k == 8) {
answer[k++] = '-';
}
if (k == 4 && answer[k] == '0') {
k++;
}
}
answer[k] = 0;
free(copy);
return answer;
}
int main() {
}
solution 함수의 첫 번째 if문을 보면 만약 첫 자리가 0이 아니면 copy[k++] = '0'; 으로 0을 삽입하게 해준다.
그 다음에 func_a를 호출하게 되는데 1번부터 복사해야하기 때문에
if문에서 k++이 되어 k = 1이 됐으니까 func_a(copy + k, num); 을 한다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int func_a(char arr[], char src[]) {
int k = 0;
for (int i = 0; i < src[i] != 0; i++) {
if ('0' <= arr[i] && src[i] <= '9') {
arr[k++] = src[i];
}
}
arr[k] = 0;
return k;
}
char* solution(char num[]) {
char* copy = (char*)malloc(sizeof(char) * strlen(num) + 1);
char* answer = (char*)malloc(sizeof(char) * 14);
int k = 0;
if (num[0] != '0') {
copy[k++] = '0';
}
func_a(copy + k, num);
if (strlen(copy + 3) < 8) {
answer[4] = '0';
}
k = 0;
for (int i = 0; i < copy[i] != 0; i++) {
answer[k++] = copy[i];
if (k == 3 || k == 8) {
answer[k++] = '-';
}
if (k == 4 && answer[k] == '0') {
k++;
}
}
answer[k] = 0;
free(copy);
return answer;
}
int main() {
}
👀 문제 : 기본 요금 1,000원, 10분당 500원 추가 요금
주차된 차들이 들어온 시간을 4자리 정수로 두고 나갈 때 요금 청산, 시간은 24제
예를 들어 시간이 14000인 경우 오후 2시, 530인 경우 오전 5시 30분
모든 차량은 밤 10시에 정산 후 나가고 직원 교대 및 식사 후 밤 12시(0시)에 영업 시작
#include <stdio.h>
int func_a(int a) {
return ((a / 100) * 60) + (a % 100);
}
int solution(int arr[], int arr_len) {
int answer = 0;
int min_a;
int min_b;
min_a = func_a(빈칸);
for (int i = 0; i < arr_len; i++) {
min_b = func_a(빈칸);
answer += 1000 + ((min_a - min_b) / 10) * 500;
}
return answer;
}
func_a 함수
1. 매개 변수로 받은 a를 100으로 나눈 후 a를 100으로 나눈 나머지와 더한다.
solution 함수
1. answer, min_a, min_b 변수 선언
2. min_a는 밤 10시에 정산이 끝나기 때문에 밤 10시를 뜻하는 24시간제 2200을 매개변수로 보낸다.
3. 남아있는 자동차의 길이만큼 반복한다.
4. min_b는 배열 속 차들의 정산 요금을 각각 구한다.
5. answer에 1000 + ((min_a - min_b) / 10) 500을 대입한다
(1000은 기본 요금, min_a - min_b는 밤 10시 - 들어온 시간, 500은 10분당 요금)
#include <stdio.h>
int func_a(int a) {
return ((a / 100) * 60) + (a % 100);
}
int solution(int arr[], int arr_len) {
int answer = 0;
int min_a;
int min_b;
min_a = func_a(2200);
for (int i = 0; i < arr_len; i++) {
min_b = func_a(arr[i]);
answer += 1000 + ((min_a - min_b) / 10) * 500;
}
return answer;
}
👀 문제 : 6량 열차로 운행, 각 좌석은 40개이다. 만약 좌석이 부족한 경우 서서 가야한다. 출발-도착까지 N개의 역을 지나는 동안 내리는 사람, 타는 사람이 있습니다. 안전상 서서가는 사람들을 최소화시키기 위해 승차 인원에 대한 조사로 입석인 사람이 가장 많을 때가 몇 명인지 파악하기
#include <stdio.h>
int solution(int down[], int up[], int N) {
int answer = 0;
int stand = 0;
int passenger = 0;
for (int i = 0; i < N; i++) {
passenger += up[i] - down[i];
stand = 빈칸
if (stand > 0 && stand > answer) {
answer = 빈칸;
}
}
return answer;
}
#include <stdio.h>
int solution(int down[], int up[], int N) {
int answer = 0;
int stand = 0;
int passenger = 0;
for (int i = 0; i < N; i++) {
passenger += up[i] - down[i];
stand = passenger - 240;
if (stand > 0 && stand > answer) {
answer = stand;
}
}
return answer;
}
👀 문제 : 상품을 들여오는 원가에 각각 다른 비율로 이익률을 더하여 판매가로 산정한다. 코드 일부분이 잘못되었으니 수정해보자.
#include <stdio.h>
#include <stdlib.h>
double func_a(double a[], int n) {
double min;
min = a[0];
for (int i = 0; i < n; i++) {
if(a[i] < min) {
min = a[i];
}
}
return min;
}
int solution(int arr[][2], int arr_len) {
double* sales = (double*)malloc(sizeof(double) * arr_len);
double percent;
for (int i = 0; i < arr_len; i++) {
if (arr[i][0] < 5000) percent = 0.25;
else if (arr[i][0] < 15000) percent = 0.2;
else if (arr[i][0] < 100000) percent = 0.15;
else percent = 0.1;
sales[i] = arr[i][0] * percent + arr[i][1];
}
return (int)func_a(sales, arr_len);
}
func_a 함수 설명
1. 매개변수로 들어온 a 배열과 a의 길이 n
2. a 배열의 첫 번째를 임의의 최솟값으로 지정
3. a의 길이로 반복하기
4. 만약 a의 첫 값이 해당 인덱스의 a배열보다 크면 min 변수는 a[i]의 값을 가짐
5. 즉 최소값을 구하는 함수
solution 함수
1. 판매가를 넣을 배열을 동적할당
2. 세일 퍼센트를 넣을 변수
3. 배열의 길이만큼 반복
4. 만약 5000원 미만이면 세일률 : 0.25%
... 쭉쭉
5. 판매가를 넣을 배열 = 상품 원가 할인률 + 상품 개수
가 아니라 = **상품 원가 할인률 * 상품 개수** 여야 하므로
#include <stdio.h>
#include <stdlib.h>
double func_a(double a[], int n) {
double min;
min = a[0];
for (int i = 0; i < n; i++) {
if(a[i] < min) {
min = a[i];
}
}
return min;
}
int solution(int arr[][2], int arr_len) {
double* sales = (double*)malloc(sizeof(double) * arr_len);
double percent;
for (int i = 0; i < arr_len; i++) {
if (arr[i][0] < 5000) percent = 0.25;
else if (arr[i][0] < 15000) percent = 0.2;
else if (arr[i][0] < 100000) percent = 0.15;
else percent = 0.1;
sales[i] = arr[i][0] * percent * arr[i][1];
}
return (int)func_a(sales, arr_len);
}
#include <stdio.h>
double solution(int x, int y) {
double answer;
double b1 = y - x;
double b2 = y + x;
double a1 = (y * (x - b1)) / 2.0;
double a2 = (y * (b2 - x)) / 2.0;
answer = a1 + a2;
return answer;
}
👀 문제 : 컴퓨터와 철수가 숫자 게임한다. 컴퓨터가 부른 숫자가 답보다 작으면 d 입력, 크면 u 입력 같으면 c 입력
예를 들어 정답은 17, 컴퓨터가 25면 u, 17이면 c로 같으니까 종료
#include <stdio.h>
int solution(char answer[]) {
int min = 1;
int max = 100;
int result;
for (int i = 0; i < answer[i] != 0; i++) {
result = (max + min) / 2;
if (min == max || answer[i] == 'c') break;
if (answer[i] == 'u') 빈칸;
if (answer[i] == 'd') 빈칸;
}
return answer;
}
#include <stdio.h>
int solution(char answer[]) {
int min = 1;
int max = 100;
int result;
for (int i = 0; i < answer[i] != 0; i++) {
result = (max + min) / 2;
if (min == max || answer[i] == 'c') break;
if (answer[i] == 'u') max = result;
if (answer[i] == 'd') min = result;
}
return answer;
}
#include <stdio.h>
#include <stdlib.h>
int* solution(int arr[], int arr_len, int bill) {
int* result = (int*)malloc(sizeof(int) * arr_len);
int unit_price = (bill / arr[0]) + 1;
for (int i = 0; i < 8; i++) {
result[i] = arr[i] * unit_price;
}
return result;
}
#include <stdio.h>
#include <stdlib.h>
int* solution(int arr[], int arr_len, int bill) {
int* result = (int*)malloc(sizeof(int) * arr_len);
int unit_price = (bill / arr[0]) + 1;
for (int i = 0; i < 8; i++) {
result[i] = arr[i + 1] * unit_price;
}
return result;
}