알고리즘
[알고리즘] 백준 3052 : 나머지
녕녕펀치
2024. 8. 6. 20:24
https://www.acmicpc.net/problem/3052
문제
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
이거보자마자 배열이 바로 생각나서 일단 배열을 선언해줌!
#include <iostream>
using namespace std;
int main(){
int n, sum;
int arr[42];
}
왜 42개냐?!!!!! 42로 나눈 나머지니깐 나머지가 될 수 있는 것은 0~41까지 → 총 42개
그러고 나머지가 0이면 배열 0번째에 저장, 3이면 배열 3번째에 저장하는 식으로 진행!
for(int i=0; i<42; i++){
arr[i] = 0;
}
먼저 모든 배열 안의 수를 0으로 지정
for(int i=0; i<10; i++){
cin >> n;
arr[n%42]++;
}
저장을 할 때마다 배열 x(나머지 수)번째에 +1 해주는 코드 작성
sum을 선언 !!
sum == 입력을 다 하고 나온 서로 다른 나머지 값의 수
int sum;
sum = 42;
왜 42냐???
나는 나올 수 있는 나머지 수가 42여서 나머지가 안나온 것을 하나씩 빼기 위해 42로 선언함!!!!!
그럼 안한게 뭐가 있찌??????
나머지가 안나온 것을 하나씩 뺴기?
웅 마자 정답 !
for(int i=0; i<42; i++){
if(arr[i]==0){
sum --;
}
}
배열 arr 안에서 0이면 sum을 하나씩 빼기 ~~~~
arr 안에서 0이 의미하는 것 == 나머지가 안나왔다는 것
ex) 배열 안 3번째가 0이면 나머지가 3인 것이 안나왔다는 것 !
최종 코드
#include <iostream>
using namespace std;
int main(){
int n, sum;
int arr[42];
sum = 42;
for(int i=0; i<42; i++){
arr[i] = 0;
}
for(int i=0; i<10; i++){
cin >> n;
arr[n%42]++;
}
for(int i=0; i<42; i++){
if(arr[i]==0){
sum --;
}
}
cout << sum ;
return 0;
}