1092: [기초-1차원 배열] 이상한 출석 번호 부르기1(설명)(C)
[만든사람 : 전현석, 정종광(채점데이터 및 확인), 배준호(확인), 최웅선(확인), 김지혜(그림) (2013)]
문제 설명
본 문제는 C 의 빠른 기초 학습을 위해 설계된 문제로서 C 코드 제출을 기준으로 설명되어 있습니다.
------
정보 선생님은 수업을 시작하기 전에 이상한 출석을 부른다.
선생님은 출석부를 보고 번호를 부르는데,
친구들의 얼굴과 이름을 빨리 외우기 위해 번호를 랜덤으로 아무렇게나 부른다.
그리고 얼굴과 이름이 잘 기억되지 않는 친구들은 번호를 여러 번 더 부르는데,
이름과 얼굴을 더 빨리 외우려고 하는 것이다.
영일이는 각각의 번호들이 몇 번씩 불렸는지 알고 싶어졌다.
아무렇게나 부른 n 번의 출석 번호가 주어질 때, 각 번호(1 ~ 23)가 불린 횟수를 출력해보자.
예시
...
int a[100]; //a[0] ~ a[99] 까지 정수를 저장할 수 있는 배열을 만들어라.
for(i=0; i<100; i++)
{
scanf("%d", &a[i]); // 각각의 방에 순서대로 반복하면서 값을 입력해라.
}
...
참고
각 번호가 불린 횟수를 기록하고 출력하기 위해 변수 23개를 선언할 수도 있다.
하지만 C언어에서는 같은 이름에 번호를 붙여 사용하는 배열(array)을 사용할 수 있다.
이는 마치 아파트의 동 호수(예를 들어 a동 101호)와 같이 번호를 붙여 집을 구분하는 것과
비슷하다.
예를 들어 a동 101호를 다르게 표현하면 a[101] 과 같은 표현이 가능한 것이다.
이렇게 번호를 붙여 데이터를 저장할 수 있는 변수인 배열을 사용하기 위해서는
변수처럼, 사용하기 전에 선언해주어야 하는데 아래와 같은 방법으로 가능하다.
배열을 사용하기 전에 배열에 들어있는 값을 초기화시키는 것이 좋은데,
다음과 같은 여러 가지 방법이 있다.
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 ~ 23)가 불린 횟수를 출력해보자.
...
int a[100]; //a[0] ~ a[99] 까지 정수를 저장할 수 있는 배열을 만들어라.
for(i=0; i<100; i++)
{
scanf("%d", &a[i]); // 각각의 방에 순서대로 반복하면서 값을 입력해라.
}
...
참고
각 번호가 불린 횟수를 기록하고 출력하기 위해 변수 23개를 선언할 수도 있다.
하지만 C언어에서는 같은 이름에 번호를 붙여 사용하는 배열(array)을 사용할 수 있다.
이는 마치 아파트의 동 호수(예를 들어 a동 101호)와 같이 번호를 붙여 집을 구분하는 것과
비슷하다.
예를 들어 a동 101호를 다르게 표현하면 a[101] 과 같은 표현이 가능한 것이다.
이렇게 번호를 붙여 데이터를 저장할 수 있는 변수인 배열을 사용하기 위해서는
변수처럼, 사용하기 전에 선언해주어야 하는데 아래와 같은 방법으로 가능하다.
배열을 사용하기 전에 배열에 들어있는 값을 초기화시키는 것이 좋은데,
다음과 같은 여러 가지 방법이 있다.
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)가 입력된다.
두 번째 줄에는 n 개의 번호(k)가 스페이스로 분리되어 한 줄로 입력된다.
(1<=n<=10000, 1<=k<=23)
두 번째 줄에는 n 개의 번호(k)가 스페이스로 분리되어 한 줄로 입력된다.
(1<=n<=10000, 1<=k<=23)
출력 설명
1 번부터, 23 번까지 각 번호가 불린 횟수를 스페이스로 구분하여 한 줄로 출력한다.
입력 예시 Copy
10
1 3 2 2 5 6 7 4 5 9
출력 예시 Copy
1 2 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
도움
기초100제(c)1 v1.5 : 정보교사 커뮤니티 @컴퓨터과학사랑(CSL)
- 중고등학교 정보 선생님들과 함께 정보수업/방과후/동아리활동 등을 통해 재미있게 배워보세요.
- 모든 내용 및 이미지들은 저작자와의 협의 없이 무단으로 사용할 수 없습니다.
- 중고등학교 정보 선생님들과 함께 정보수업/방과후/동아리활동 등을 통해 재미있게 배워보세요.
- 모든 내용 및 이미지들은 저작자와의 협의 없이 무단으로 사용할 수 없습니다.