개론 스터디

[250211] C 스터디 4주차

jisu0924 2025. 2. 11. 20:27

1. 양꼬치

더보기

문제 설명
머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.

제한사항
0 < n < 1,000
n / 10 ≤ k < 1,000
서비스로 받은 음료수는 모두 마십니다.


입출력 예
n k result
10 3 124,000
64 6 768,000

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int n, int k) {
    int answer = 0;
    return answer;
}

 

예를 들어 양꼬치를 20인분 먹었다고 했을 떼 20을 10으로 나누면 때 몫이 2가 된다. 즉, 음료수 2개가 서비스라는 것이다. 경우는 두 가지이다. 

  • 음료수를 2개보다 적거나 같게 시켰을 때
  • 음료수를 3개 이상 시켰을 때

즉, n으로 따지면 n을 10으로 나눈 몫이 서비스 음료수의 개수가 되고 

  •  n을 10으로 나눴을 때의 값 >=k  : 시킨 음료수의 값을 모두 제외
  •  n을 10으로 나눴을 때의 값 < k  : 시킨 음료수 값 - 서비스 음료수 값

인 것이다. 정답은 다음과 같다.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int n, int k) {
    int answer = 0;
        if(n/10 >= k)
            answer=12000*n;
        else
            answer=12000*n + k*2000 - n/10*2000;
        return answer;
}

 


 

2. 피자 나눠 먹기 (3)

더보기

문제 설명
머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

제한사항
2 ≤ slice ≤ 10
1 ≤ n ≤ 100


입출력 예
slice n result
7 10 2
4 12 3

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int slice, int n) {
    int answer = 0;
    return answer;
}

간단함 반복문 돌려서 1부터 넣었을 때 slice*i의 크기가 n보다 크면 그 i의 값이 result다. 커지면 break 하고 그 값을 return 하면 됨. 답은 다음과 같다.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int slice, int n) {
    int answer = 0;
    for(int i=0;i<100;i++){
        answer=i;
        if(slice*i>=n)
            break;
    }
    return answer;
}

100은 그냥 n 제한값. for말고 while써도 된다 i의 제한값이 없으니


3. 세균 증식

더보기

문제 설명
어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ n ≤ 10
1 ≤ t ≤ 15


입출력 예
n t result
2 10 2048
7 15 229,376

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int n, int t) {
    int answer = 0;
    return answer;
}

임의의 변수 i를 0으로 설정한 후 t만큼 반복해 주는데, 반복할 때마다 n의 값에 2씩 곱해지도록 하면 된다. 답은 다음과 같다.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int n, int t) {
    int answer = 0;
    for(int i=0;i<t;i++)
        n*=2;
    answer=n;
    return answer;
}


4. 순서쌍의 개수

더보기

문제 설명
순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ n ≤ 1,000,000


입출력 예
n result
20 6
100 9

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int n) {
    int answer = 0;
    return answer;
}

예를 들어 n이 20이면, 20의 약수는 1, 2, 4, 5, 10, 20이다. 약수의 숫자들로 순서쌍이 만들어지기 때문에 순서쌍의 숫자들은 모두 20을 n으로 나누었을 때 나머지가 0인 숫자들이어야 한다. 따라서 답은 다음과 같다.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int n) {
    int answer = 0;
    for(int i=1;i<=n;i++)
        if(n%i==0)
            answer++;
    return answer;
}


5. 머쓱이보다 키 큰 사람

더보기

문제 설명
머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 return 하도록 solution 함수를 완성해보세요.

제한사항
1 ≤ array의 길이 ≤ 100
1 ≤ height ≤ 200
1 ≤ array의 원소 ≤ 200


입출력 예
array height result
[149, 180, 192, 170] 167 3
[180, 120, 140] 190 0

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// array_len은 배열 array의 길이입니다.
int solution(int array[], size_t array_len, int height) {
    int answer = 0;
    return answer;
}

배열의 길이만큼 반복해 준 후 array[i]가 height다 크면 answer++ 해 주면 된다.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// array_len은 배열 array의 길이입니다.
int solution(int array[], size_t array_len, int height) {
    int answer = 0;
    for(int i=0;i<array_len;i++)
        if(array[i]>height)
            answer++;
    return answer;
}