YunDev

백준 10807번[C] - 상세 풀이 본문

Programming/Baekjoon Program

백준 10807번[C] - 상세 풀이

S준 2024. 1. 12. 12:08
 

10807번: 개수 세기

첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거

www.acmicpc.net

 


 

1. 배열 크기를 정적으로 할당한 코드

#include <stdio.h>

int main() {
    int num = 0, indexof = 0, count = 0;
    int arr[100];
    scanf("%d", &num);
    for(int i = 0; i < num; i++) {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &indexof);
   
    for(int i = 0; i<num; i++) {
        if(arr[i] == indexof) {
            count++;
        }
    }
    printf("%d", count);
    return 0;
}


풀이 : 배열의 크기를 직접 지정한 방식입니다. 입력한 숫자만큼 값을 배열에 저장하고 반복문을 돌며 찾고자 하는 숫자가 있다면 count를 증가시켜 결과를 출력합니다.

 

2. 동적 메모리 할당을 이용한 코드

#include <stdio.h>

int main() {
    int num = 0, indexof = 0, count = 0;
    scanf("%d", &num);
    int *arr = (int*)malloc(num * sizeof(int)); //동적 메모리 할당
    for(int i = 0; i < num; i++) {
        scanf("%d ", &arr[i]);
    }
    scanf("%d", &indexof);
   
    for(int i = 0; i<num; i++) {
        if(arr[i] == indexof) {
            count+=1;
        }
    }
    printf("%d", count);

    free(arr); //할당한 메모리 해제
    return 0;
}

 

풀이 : 배열의 크기를 정적으로 할당해도 상관은 없지만 효율적인 메모리 사용을 위해서 입력받은 값만큼 동적으로 배열의 크기를 할당하여 풀었습니다. 여기서 동적 메모리 할당이란 프로그램이 실행되는 중인 런타임에 필요한 만큼의 메모리 공간을 확보하는 것을 의미합니다. 또한  힙(heap) 영역에 필요할 때마다 메모리 공간을 할당하고, 더 이상 필요하지 않을 경우 메모리를 해제해주는 과정을 의미하기도합니다.
이 부분은 메모리 구조에 대한 개념이 필요하기에 더 자세하게 공부해보는게 좋을 것 같습니다.

'Programming > Baekjoon Program' 카테고리의 다른 글

백준 2587번[C] - 상세 풀이  (0) 2024.01.14
백준 5597번[C] - 풀이  (0) 2024.01.13
백준 27433번[C] - 상세 풀이  (0) 2024.01.11
백준 2480번[C] - 상세 풀이  (2) 2024.01.10
백준 2525번[C] - 상세 풀이  (0) 2024.01.09