백준 3052번 [ 나머지 ]

홍수민·2023년 1월 28일
0

BAEKJOON이다

목록 보기
12/18

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로 만들어주었다.

앞으로 이런 문제를 또 만나게 된다면, 이 풀이 방식처럼 '될 수 없는 값'을 활용해야겠다.

profile
수만이다

0개의 댓글