[C++] 백준 6359 : 만취한 상범

Kim Nahyeong·2022년 3월 18일
0

백준

목록 보기
108/157

#include <iostream>

int T, n, tmp = 1;
int main(int argc, char** argv){
  scanf("%d", &T);

  for(int i = 0; i < T; i++){
    int arr[101] = {0}; // 0 : 닫힘, 1 : 열림
    int cnt = 0;
    scanf("%d", &n);
    for(int j = 1; j <= n; j++){
      tmp = j;
      while(tmp <= n){
        if(arr[tmp] == 0){
          arr[tmp] = 1;
        } else {
          arr[tmp] = 0;
        }
        tmp += j;
      }
    }

    for(int j = 1; j <= n; j++){
      if(arr[j] == 1){
        cnt++;
      }
    }
    printf("%d\n", cnt);
  }

  return 0;
}

왜 바로 풀지를 못하고 생각을 좀 했어야했는지. 아직 수련이 많이 부족한 것 같다.

그리고 0 <-> 1 반전에 비트반전을 써보려고 했는데 비트반전을 하면 -1이 되는 것 같더라 ㅋㅋㅋ 왜 그 생각을 못했을까

약간 에라토스테네스의 체를 응용한 문제처럼 풀었다.

0개의 댓글