https://www.acmicpc.net/problem/3052


#include <stdio.h>
int main() {
int myary[10];
for(int i = 0; i<10; i++) {
int a;
scanf("%d",&a);
myary[i] = a;
}
int dif = 0;
int ary2[10] = {0};
int fini[999] = {0}; //처리안되었으면 0, 처리되었으면 1
for(int j = 0; j<10; j++) {
ary2[j] = myary[j]%42;
if(fini[ary2[j]] == 0) {
fini[ary2[j]] = 1;
dif++;
}
}
printf("%d",dif);
return 0;
}
[주목할만한 부분]
배열 안에 배열을 넣는 방법으로 풀어 보자.
fini[999] 배열을 0~999가 적힌 버킷(양동이) 999개로 생각하자.
버킷에는 0, 1밖에 들어갈 수 없다.
a의 범위가 0~1000의 정수이므로 나머지는 0~999가 될 수 있다.
따라서 ary2[] 배열의 요소에 들어갈 수 있는 수는 0~999이며,
이에 따라 처리된 fini[999] 의 크기는 999이고,
이는 ary2[] 배열 각 요소에 저장된 숫자에 하나씩 대응된다.
fini[]의 초기 상태는 모두 0이 들어가 있다.
ary2[] 배열의 각 요소를 돌며
예를 들어 ary2[1] = 33 이라면, fini[33] 즉 33이 적힌 버킷에 0 대신 1을 넣고, dif 를 1 증가시킨다.
이미 버킷에 들어간 것이 1이라면 아무 일도 일어나지 않는다.
이런 식으로 0 대신 1을 넣은 횟수를 세면, 그것이 서로 다른 나머지 값의 개수일 것이다.
'PROGRAMMING > [C] Baekjoon Online Judge (BOJ)' 카테고리의 다른 글
| [C/Baekjoon] 백준 1546번(4-10) : 평균 (2) | 2025.01.05 |
|---|---|
| [C/Baekjoon] 백준 10811번(4-9) : 바구니 뒤집기 (1) | 2025.01.04 |
| [C/Baekjoon] 백준 10871번(4-2) : x보다 작은 수 (+오름차순 정렬) (0) | 2024.12.31 |
| [C/Baekjoon] 백준 10951번(3-12) : A + B - 4 (0) | 2024.12.30 |
| [C/Baekjoon] 백준 2480번(2-7) : 주사위 세개 (0) | 2024.11.17 |