[백준] 10807, 등장한 숫자의 횟수 세기

YUN·2026년 2월 18일

C++

목록 보기
26/85


여러개의 정수를 입력 받고, 그중에서 특정 정수가 몇번 등장했는지 출력하는 문제이다.

이 문제는 2가지 풀이법이 있다.

(1) 정수의 범위가 -100~100 이니 size가 201인 1차원 배열을 만들고 입력 받은 정수 + 100을 인덱스로 배열에 등장 횟수를 누적하기

(2) N개의 정수가 주어지므로 -> size가 N인 1차원 배열 만들어서 입력 받은 정수를 모두 저장해두기 -> 전부 순회하면서 특정 정수가 몇 번 등장했는지 카운트하기

1. 방법 1

#include <stdio.h>

int main(){
    int N, v;
    int cnt=0;
    scanf("%d", &N);
    int arr[N]={};
    for(int i=0; i<N; i++) scanf("%d", arr+i);
    scanf("%d", &v);
    for(int i=0; i<N; i++) if(v==arr[i]) cnt++;
    printf("%d", cnt);
    return 0;
}

2. 방법 2

#include <iostream>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int N,a,v;
    int cnt[201] = {};
    cin >> N;
    for(int i=0; i<N; i++) {
        cin >> a;
        cnt[a+100]++;
    }
    cin >> v;
    cout << cnt[v+100] << endl;
    return 0;
}

3. 느낀점

(1) 배열 이름은 주소이다.

for(int i=0; i<N; i++) scanf("%d", arr+i);

위와같이 배열 이름을 주소로써서 배열에 값을 저장할수도있다.

(2) 배열에 접근은 진짜 되는것 이다.

C++에서 arr[2]는 컴파일러에 의해 자동으로 *(arr + 2) 로 변환된다.

즉, 역참조로 변환된다.

따라서 arr[2] = 5 와 같이 배열에 값을 대입할 수 있는 것이다.

(3) cout << char 는 문자를 출력한다.

cout << char 타입 데이터 하게되면 char 타입의 데이터가 ASCII 코드에 의해 특정 문자로 변환되고,

정수가 아니라 문자가 출력된다.

조심하자.

(4) 배열의 사이즈는 []로, 배열의 요소는 {} 로

평소에 별로 신경쓰지않고 무의식적으로 코드를 작성했는데,

문득 보니 배열의 사이즈는 []로, 배열의 요소는 {} 로 한다는 것을 깨달았다. 나중에 헷갈릴수도 있으니 잘 외워둬야겠다.

profile
안녕하세요. 전자공학부 학부생의 공부 기록입니다.

0개의 댓글