[C언어 코드업 문제풀이] CodeUp 1093 : [기초-1차원배열] 이상한 출석 번호 부르기1(설명)

코드업 1093번 이상한 출석 번호 부르기1 문제 풀이 해답입니다.

 

 

1. 문제 설명

 

정보 선생님은 수업을 시작하기 전에 이상한 출석을 부른다.

선생님은 출석부를 보고 번호를 부르는데,
학생들의 얼굴과 이름을 빨리 익히기 위해 번호를 무작위(랜덤)으로 부른다.

그리고 얼굴과 이름이 잘 기억되지 않는 학생들은 번호를 여러 번 불러
이름과 얼굴을 빨리 익히려고 하는 것이다.

출석 번호를 n번 무작위로 불렀을 때, 각 번호(1 ~ 23)가 불린 횟수를 각각 출력해보자.


참고
각 번호가 불린 횟수를 기록하고 출력하기 위해 변수 23개를 선언할 수도 있다.
하지만 C언어에서는 같은 이름에 번호를 붙여 사용하는 배열(array)을 사용할 수 있다.
이는 마치 아파트의 동 호수(예를 들어 a동 101호)와 같이 번호를 붙여 집을 구분하는 것과
비슷하다.

예를 들어 a동 101호를 다르게 표현하면 a[101] 과 같은 표현이 가능한 것이다.
이렇게 번호를 붙여 데이터를 저장할 수 있는 변수인 배열을 사용하기 위해서는
변수처럼, 사용하기 전에 선언해주어야 하는데 아래와 같은 방법으로 가능하다.

예시
int a[100]; //a[0] ~ a[99] 까지 정수를 저장할 수 있는 배열을 만들어라.
for(i=0; i<100; i++)
{
  scanf("%d", &a[i]); // 각각의 방에 순서대로 반복하면서 값을 입력해라.
}

배열을 사용하기 전에 배열에 들어있는 값을 초기화시키는 것이 좋은데,
다음과 같은 여러 가지 방법이 있다.

int a[24]={}; //0번부터 23번까지 모두 0으로 초기화된다.
int a[24]={1,2,3}; //1,2,3 이 순서대로 들어가고 나머지는 모두 0으로 초기화된다.
int a[3]={1,2,3}; //1,2,3 이 순서대로 저장된다.
int a[3]={1,2,3,4}; //방을 3개 만들고 값을 4개를 집어넣어라? 오류 발생!


문제 해결을 위한 참고 코드

int n, i, t;
int a[24]={};
scanf("%d", &n); //개수 입력받기
for(i=1; i<=n; i++) //개수만큼 입력받기
{
  scanf("%d", &t); //읽어서
  a[t]=a[t]+1; //들어있던 값에 1만큼 더해 다시 저장. a[t]+=1 과 같다.
}
for(i=1; i<=23; i++)
{
  printf("%d ", a[i]); //1~23 번 배열에 저장되어있는 값 출력하기
} 

 

2. 입력

 

첫 번째 줄에 출석 번호를 부른 횟수인 정수 n이 입력된다. (1 ~ 10000)
두 번째 줄에는 무작위로 부른 n개의 번호(1 ~ 23)가 공백을 두고 순서대로 입력된다. 

 

3. 출력

 

1번부터 번호가 불린 횟수를 순서대로 공백으로 구분하여 한 줄로 출력한다. 

 

4. 입력 예시

 

10

1 3 2 2 5 6 7 4 5 9

 

5. 출력 예시

 

1 2 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 

출처: C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 

 

6. 문제 풀이

 

#include<stdio.h>
 
int main() {
 
    int arr[24= {0,};
 
    int num;
    int num2;
    scanf("%d"&num);
 
    for (int i = 1; i <= num; i++) {
        scanf("%d"&num2);
        arr[num2] += 1;
    }
 
    for (int j = 1; j < 24; j++) {
        printf("%d ", arr[j]);
    }
 
 
 
    return 0;
}
 

 

 

0번 부터 23번까지 배열을 초기화 하기 위해서 int arr[24= {0,}; 을 사용해서 배열을 초기화 해줍니다.(0으로)

 ={} 을 통해 초기화 해 줄수도 있습니다.

 

    for (int i = 1; i <= num; i++) {

        scanf("%d"&num2);

        arr[num2] += 1;

    }

 

이번 문제는 번호가 불린 횟수를 세는 프로그램이기 때문에 번호는 해당 배열의 위치 값이라 가정합니다.

2번이 불렸다면 arr[2]가 선택됩니다.  -> arr[num2]

 

arr[num2] += 1;

 

해당 번호가 불렸을 때(입력 받았을 때) +1을 해주어 불린 횟수를 증가시켜 줍니다.

 

그 후   

 

for (int j = 1; j < 24; j++) {

        printf("%d ", arr[j]);

    }

 

을 통해 1번부터 23번 까지의 불린 횟수를 전부 출력하게 됩니다.

 

감사합니다.

댓글()