문제 설명 |
정보 선생님은 수업을 시작하기 전에 이상한 출석을 부른다. 선생님은 출석부를 보고 번호를 부르는데, 학생들의 얼굴과 이름을 빨리 익히기 위해 번호를 무작위(랜덤)으로 부른다. 그리고 얼굴과 이름이 잘 기억되지 않는 학생들은 번호를 여러 번 불러 이름과 얼굴을 빨리 익히려고 하는 것이다. 출석 번호를 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 번 배열에 저장되어있는 값 출력하기 } |
입력 |
첫 번째 줄에 출석 번호를 부른 횟수인 정수 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 |
#include <stdio.h>
int i, j, k, a[24];
int main()
{
scanf("%d", &k);
for(i=0; i<k; i++)
{
scanf("%d", &j);
a[j]++;
}
for(i=1; i<=23; i++)
{
printf("%d ",a[i]);
}
return 0;
}
'문제풀이 > CodeUp 기초 100제' 카테고리의 다른 글
CodeUp [기초 100제] - 1095 (0) | 2020.09.28 |
---|---|
CodeUp [기초 100제] - 1094 (0) | 2020.09.28 |
CodeUp [기초 100제] - 1092 (0) | 2020.09.28 |
CodeUp [기초 100제] - 1091 (0) | 2020.09.28 |
CodeUp [기초 100제] - 1090 (0) | 2020.09.28 |