문제 번호 1169 --[기초-종합+배열] 이상한 출석 번호 부르기1

1169: [기초-종합+배열] 이상한 출석 번호 부르기1

시간 제한: 1 Sec  메모리 제한: 128 MB
제출: 794  해결 문제 수: 493
[제출][채점상황][게시판][:]

문제 설명

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

선생님은 출석부를 보고 번호를 부르는데,

학생들의 얼굴과 이름을 빨리 익히기 위해 번호를 무작위(랜덤)으로 부른다.

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

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

입력

첫 번째 줄에 출석 번호를 부른 횟수 정수 n이 입력된다.
(1 ~ 10000)

두 번째 줄에는 무작위로 부른 n개의 번호(1 ~ 23)가 공백을 두고 순서대로 입력된다.

출력

1번 부터 번호가 불린 횟수를 순서대로 공백을 두고 한 줄로 출력한다.

입력예시

10
1 3 2 2 5 6 7 4 5 9

출력예시

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

도움말

각 번호가 불린 횟수를 기록하고 출력하기 위해 변수 23개를 선언할 수 도 있다.

하지만, C언어에는 같은 이름에 번호를 붙여 사용하는 배열(array) 이라는 것을 사용할 수 있다.



예를 들어 100개의 데이터를 저장하고자 한다면 a, b, c, .... 이러한 변수 명으로 선언해야 할 것이다.


상당히 번거로운 일이 아닐 수 없다.


따라서 이러한 문제점을 해결하기 위해 여러 개의 데이터를 동일한 이름으로 처리 할 수 있도록 배열(array)을 많은 프로그래밍 언어에서 지원한다.


C언어에서는 배열이름[첨자] 형태로 사용하게 된다. 이때 [ ] 에 입력되는 값이 처음 선언할 때 만들고자 하는 배열의 크기가 되고,


실제 사용할 때 첨자를 이용해 해당 배열의 하나의 공간에 접근하여 사용하게 된다.


그리고 항상 첫 번째 첨자는 0부터 시작하게 된다.


이러한 배열에서 첨자는 반복문을 활용하여 쉽게 접근이 가능하다.


따라서 배열 가는 곳에 반복문은 항상 존재한다고 보면 된다.



아파트의 동 호수 예를 들어 a동 101호 와 같이 번호를 붙여 집을 구분하는 것과 비슷하다.

예를 들어 a동 101호를 다르게 표현하면 a[101] 과 같은 표현이 가능한 것이다.


쉽게 이야기 하면 변수를 한번에 여러개를 만드는 것 같다. (대신에 [ ] 안에 번호를 통해 변수를 참조한다.)



이렇게 번호를 붙여 데이터를 저장할 수 있는 변수인 배열을 사용하기 위해서는 변수와 같이 사용하기 전에 선언해주어야 하는데, 아래와 같은 방법으로 가능하다.





예시

int a[100]; //a[0] ~ a[99] 까지 정수를 저장할 수 있는 100개의 배열을 만들어라. 여기서 유의할 점은 0부터 만들어진다는 것이다.

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 번 배열에 저장되어있는 값 출력하기

}




출처

[제출][채점상황]