두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
출력
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
이중 for문을 통해 42로 나눈 나머지를 배열에 입력한 뒤 해당 나머지를 배열에 저장된 값이 있으면 전체 개수
cnt
에서 하나 빼고, 같은 수가 없으면cnt
를 하나 더하는 로직
#include <iostream>
using namespace std;
int main(){
int n,arr[10]={0},cnt=0;
for(int i=0;i<10;i++){
cin >> n;
arr[i] = n%42;
for(int j=0;j<i;j++){
if(n%42==arr[j]) {
cnt--;
break;
}
}
cnt++;
}
cout << cnt;
}
#import<iostream>
int n,r[42],c;main(){for(;std::cin>>n;)r[n%42]++?c:++c;std::cout<<c;}
가독성을 위해 분해해보자
#import<iostream>
int n,r[42],c; //나머지를 배열의 인덱스로 확인하는 로직으로 r 배열을 선언하면 모든 값이 0으로 초기화 된다.
main(){
for(;std::cin>>n;) // 굳이 for loop로 할 필요가 없고 조건문만 확인하는거니 while로도 된다.
r[n%42]++?c:++c; // 삼항연산자를 이용하여 나머지를 인덱스로 하여 값을 1증가 시키기 전에,
// 인덱스에 없는 경우(즉, 0이어서 false 인경우) c값을 하나 증가,
// 이미 한번 저장되어 1이 아닌 경우(즉, true인 경우) c 값을 그대로 둔다.
std::cout<<c;
}