반응형
https://www.acmicpc.net/problem/5597
5597번: 과제 안 내신 분..?
X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다. 교수님이 내준 특별과제를 28명이 제출했는데,
www.acmicpc.net
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int n[30];
int d;
int temp[2];
int count = 0;
for(int i = 0; i < 30; i++) {
n[i] = i + 1; // 1 ~ 30까지 배열에 선언
}
for (int i = 0; i < 28; i++) {
scanf("%d", &d);
for (int j = 0; j < 30; j++) {
if (n[j] == d) {n[j] = 0;} //배열의 원소가 입력 받은 수와 같다면 0으로 초기화
}
}
for (int i = 0; i < 30; i++) {
if (n[i] != 0) {
temp[count] = n[i]; //최솟값을 뽑아내기 위한 과정
count++;
}
}
if (temp[0] > temp[1]) { printf("%d\n%d", temp[1], temp[0]); }
else { printf("%d\n%d", temp[0], temp[1]); } //최솟값이 먼저 출력되게
return 0;
}
☞풀이 전
출력에 있어 작은 수부터 출력하라는 조건을 못 봐 틀렸었다.
정렬을 하기에는 원소의 수가 고작 2개였기 때문에
int형 배열을 하나 선언해주어 직접 비교하는 방식으로 코드를 구상했다.
☞풀이 후
풀긴 풀었는데 코드가 지저분하고 비효율적이여 분명 더 좋은 방법이 있지 않을까 싶었는데
꽤 생각해도 떠오르지 않아 이대로 제출했었다.
아니나 다를까 정답이라고 부를만한 코드가 존재했다.
☞다른 사람의 코드
#include <stdio.h>
main() {
int check[30] = { 0, }; //과제 제출한 학생을 체크하는 배열
for (int i = 0; i < 28; i++) { //과제 제출한 학생 체크
int n;
scanf("%d", &n);
check[n - 1] = 1;
}
for (int i = 0; i < 30; i++) //과제 미제출 학생 출석번호 출력
if (check[i] == 0)
printf("%d\n", i + 1);
}
출처 : https://lgana1021.tistory.com/37
배열의 각각의 index의 값에 집중하는 것이 아닌 배열의 index에 조금만 집중했어야했다.
입력을 int형 정수 28개를 받는다 할 때 기민하게 반응했어야 했다.
배열의 각각의 값이 아닌 index에도 집중해보자.
반응형
'Baekjoon' 카테고리의 다른 글
[C] 백준 10951번 : A + B - 4 (2) | 2023.01.13 |
---|---|
[C] 백준 9498번 : 시험 성적 (0) | 2023.01.11 |
[C] 백준 1008번 : A/B (0) | 2023.01.10 |
[C] 백준 2908번 : 상수 (0) | 2023.01.09 |
[C] 백준 1065번 : 한수 (0) | 2023.01.09 |