문제 설명 정보 선생님은 수업을 시작하기 전에 이상한 출석을 부른다. 선생님은 출석부상에 있는 학생들의 번호를 무작위(랜덤)로 부르는데, 각 번호(1 ~ 23)가 불린 횟수를 각각 출력해보자.
(참고: 학생 번호는 1번부터 23번까지 있고, 선생님은 같은 번호를 여러 번 부를 수 있다.)
입력 첫 번째 줄에 출석 번호를 부른 횟수 n이 입력된다. (1 <= n <= 10000) 두 번째 줄에 무작위로 부른 n개의 번호(1 ~ 23)가 공백을 두고 순서대로 입력된다.
출력 1번부터 23번까지 각 번호가 불린 횟수를 순서대로 공백으로 구분하여 한 줄로 출력한다.
소스 코드
#include <stdio.h>
int main() {
int n, i, t;
int a[24] = {0}; // 1번~23번 인덱스를 편하게 쓰기 위해 크기를 24로 잡고 0으로 초기화
scanf("%d", &n); // 부른 횟수 입력
for(i = 1; i <= n; i++) {
scanf("%d", &t); // 부른 번호를 입력받음
a[t] = a[t] + 1; // 해당 번호(t)의 카운트를 1 증가
}
for(i = 1; i <= 23; i++) {
printf("%d ", a[i]); // 1번부터 23번까지 불린 횟수 출력
}
return 0;
}
예시 입력 / 출력
[입력]
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
문제 해설 '빈도수 세기' 문제입니다.
문제 설명 정보 선생님은 수업을 시작하기 전에 이상한 출석을 부른다. 학생들의 얼굴과 이름을 빨리 익히기 위해 번호를 무작위(랜덤)로 부르는데, 영일이는 선생님이 부른 번호들을 기억하고 있다가 거꾸로 불러보는 것을 해보고 싶어졌다.
출석 번호를 n번 무작위로 불렀을 때, 부른 번호를 거꾸로 출력해 보자.
입력 첫 번째 줄에 번호를 부른 횟수 n이 입력된다. (1 <= n <= 10000) 두 번째 줄에 n개의 랜덤 번호(1 ~ 23)가 공백을 두고 순서대로 입력된다.
출력 출석을 부른 번호 순서를 바꾸어 공백을 두고 출력한다.
소스 코드
#include <stdio.h>
int main() {
int n, i;
int k[10000]; // 번호를 최대 10000개까지 부를 수 있으므로 넉넉하게 선언
scanf("%d", &n); // 횟수 입력
// 1. 번호 순서대로 배열에 저장
for(i = 1; i <= n; i++) {
scanf("%d", &k[i]);
}
// 2. 뒤에서부터 거꾸로 출력
for(i = n; i >= 1; i--) { // i를 n부터 1까지 줄여나감
printf("%d ", k[i]);
}
return 0;
}
예시 입력 / 출력
[입력]
10
10 4 2 3 6 6 7 9 8 5
[출력]
5 8 9 7 6 6 3 2 4 10
문제 해설 '배열의 역순 출력' 문제입니다.
문제 설명 정보 선생님은 오늘도 이상한 출석을 부른다. 영일이는 오늘도 다른 생각을 하다가 선생님이 부른 번호 중 가장 빠른 번호가 무엇이었는지 깨닫지 못했다.
출석 번호를 n번 무작위로 불렀을 때, 가장 빠른 번호를 출력해 보자.
입력 첫 번째 줄에 번호를 부른 횟수 n이 입력된다. (1 <= n <= 10000) 두 번째 줄에 n개의 랜덤 번호(1 ~ 23)가 공백을 두고 순서대로 입력된다.
출력 가장 빠른 번호를 출력한다.
소스 코드
#include <stdio.h>
int main() {
int n, i, t;
int min = 24; // 가장 빠른 번호(최솟값)를 찾기 위해, 나올 수 없는 큰 수로 초기화
scanf("%d", &n);
for(i = 1; i <= n; i++) {
scanf("%d", &t);
// 입력받은 번호(t)가 현재 알고 있는 최솟값(min)보다 작으면 갱신
if(t < min) {
min = t;
}
}
printf("%d", min);
return 0;
}
예시 입력 / 출력
[입력]
10
10 4 2 3 6 6 7 9 8 5
[출력]
2
문제 해설 '최솟값(Minimum Value) 찾기' 문제입니다.
문제 설명 기숙사 생활을 하는 학교에서 어떤 금요일(전원 귀가일)에는 모두 집으로 귀가를 한다. 오랜만에 집에 간 영일이는 아버지와 함께 두던 바둑을 다시 두고 싶어졌다. 하지만 바둑판은 19줄 * 19줄이고, 바둑알은 너무 많아 챙기기가 귀찮았다.
낯선 바둑판을 준비해 둔 아버지는, 바둑판(19 * 19)에 n개의 흰 돌을 놓는다고 할 때, n개의 흰 돌이 놓인 오목판의 상태를 출력하는 프로그램을 작성해보자.
(참고: 바둑판은 가로, 세로 19줄로 되어 있다. 좌표는 (1, 1)부터 (19, 19)까지이다.)
입력 바둑판에 올려 놓을 흰 돌의 개수(n)가 첫 줄에 입력된다. 둘째 줄 부터 n+1 번째 줄까지 힌 돌을 놓을 좌표(x, y)가 n줄 입력된다. (n은 10이하의 자연수, x, y 좌표는 1 ~ 19 사이의 정수)
출력 흰 돌이 올려진 바둑판의 상황을 출력한다. 흰 돌이 있는 곳은 1, 없는 곳은 0으로 출력하고, 각 줄의 숫자는 공백으로 띄워 출력한다.
소스 코드
#include <stdio.h>
int main() {
int n, i, j, x, y;
int board[20][20] = {0}; // 1~19 인덱스를 쓰기 위해 20x20 크기로 선언 (0으로 초기화)
scanf("%d", &n); // 놓을 돌의 개수
// 1. 돌 놓기 (입력받은 좌표를 1로 변경)
for(i = 1; i <= n; i++) {
scanf("%d %d", &x, &y);
board[x][y] = 1;
}
// 2. 바둑판 전체 출력 (19x19)
for(i = 1; i <= 19; i++) { // 행 반복
for(j = 1; j <= 19; j++) { // 열 반복
printf("%d ", board[i][j]);
}
printf("\n"); // 한 줄 출력이 끝나면 줄바꿈
}
return 0;
}
예시 입력 / 출력
[입력]
5
1 1
2 2
3 3
4 4
5 5
[출력] (실제로는 19줄이 출력됨)
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
... (이하 생략)
문제 해설 **'2차원 배열'**을 활용하는 문제입니다.
| [CodeUp] C언어 기초 100제 풀이 (1097번 ~ 1099번) (0) | 2026.02.05 |
|---|---|
| [CodeUp] C언어 기초 100제 풀이 (1089번 ~ 1092번) (0) | 2026.02.04 |
| [CodeUp] C언어 기초 100제 풀이 (1085번 ~ 1088번) (0) | 2026.02.04 |
| [CodeUp] C언어 기초 100제 풀이 (1081번 ~ 1084번) (0) | 2026.02.03 |
| [CodeUp] C언어 기초 100제 풀이 (1076번 ~ 1080번) (0) | 2026.02.03 |