https://www.acmicpc.net/problem/3052
10개의 정수를 입력받아 42로 나눈 후 서로 다른 나머지의 개수를 세는 문제.
일단 나머지를 배열에 모두 입력한 후에, 같은 값이 있을 때, 한 개를 빼고 전부 -1로 바꿔버려 나머지를 셀 때 무시하도록 만들었다.
#include<stdio.h>
int main(){
int num; // 입력받을 정수
int cnt=0; // 서로 다른 나머지의 개수를 저장할 변수
int rest[10]; // 나머지를 저장할 배열
int i; // 반복문을 위한 인자
for(i = 0; i < 10; i++){ //입력
scanf("%d", &num);
rest[i] = num % 42;
}
for(i = 0; i < 10; i++){ // 개수 세기
if (rest[i] != -1) {
cnt++; // cnt 1 증가
for (int j = i+1; j < 10; j++){
if (rest[i] == rest[j]){
rest[j] = -1; // 이후의 같은 값들을 -1로 만들어 무시하도록 한다.
}
}
}
}
printf("%d", cnt);
return 0;
}
조건적으로 이중반복문을 사용하게 되는데, 이중반복문을 쓰지 않고 풀 수 있을 것 같지만 필자는 잘 모르겠다. 나중에 좋은 아이디어가 생각나면 다시 풀어봐야겠다.
---------------------------------------20.08.16---------------------------------------
이중반복문이 필요하지 않다는 것을 깨달았다. 나머지 값을 배열의 위치로 사용하면 되는거였다.
#include<stdio.h>
int main(){
int arr[42] = {0,};
int n;
int cnt=0;
for (int i=0; i<10; i++) {
scanf("%d", &n);
arr[n%42]++;
}
for (int i = 0; i < 42; i++) {
printf("%d ", arr[i]);
}
printf("\n");
for (int i=0; i<42; i++) {
if (arr[i] != 0) {
cnt+=1;
}
}
printf("%d", cnt);
return 0;
}
'coding_test > BAEKJOON' 카테고리의 다른 글
백준 4344번 C언어 풀이 (0) | 2021.08.05 |
---|---|
백준 8958번 C언어 풀이 (0) | 2021.08.05 |
백준 1546번 C언어 풀이 (0) | 2021.08.04 |
백준 2577번 C언어 풀이 (0) | 2021.08.03 |
백준 2562번 C언어 풀이 (0) | 2021.08.03 |