https://www.acmicpc.net/problem/3052
첨에는 어떻게 풀어야 할지 감도 못 잡았다..! 구래서 약간의 인터넷 검색을 해본 결과(...^^) 해답을 찾을 수 있었다.
#include <iostream>
using namespace std;
int main() {
int A[10], B[10];
int cnt = 0;
for(int i=0; i<10; i++){
cin >> A[i];
B[i] = A[i]%42;
}
for(int i=0; i<10; i++){
if(B[i] != -1){
cnt++;
for(int j=i+1; j<10; j++){
if(B[i] == B[j]){
B[j] = -1;
}
}
}
}
cout << cnt;
}
내가 막혔던 부분은 두번째 for문이다. 다른 값만을 세는 방법이 도저히 생각나지 않았다. 위 코드는 다른 분들 코드를 참고한 것이다.
일단 당연히 for문으로 모든 나머지를 확인하는데, 이 과정에서 if문을 통해 -1과 같은지에 대한 여부를 확인한다. -1로 한 이유는 자연수를 입력받고 나머지를 계산할 때 -1과 같은 음수는 나오지 않기 때문이다. 그래서 -1이 아니라면 다른 값이 있다는 것이므로 cnt에 1을 더해준다. 그 다음 for문에서는 i보다 뒤에 있는 값들을 확인하며 i와 값이 같다면 -1로 만들어주었다.
앞으로 이런 문제를 또 만나게 된다면, 이 풀이 방식처럼 '될 수 없는 값'을 활용해야겠다.