본문 바로가기
프로그램/C언어 1000제

C언어 222제] 빛, 더 많은 빛(Light, More Light)

by 건티 2025. 1. 29.
728x90


출처 : 반크_반크 20년 백서

문제]

우리 학교에는 복도 불을 켜고 끄는 마부(Mabu)라는 사람이 있다. 전구마다 불을 켜고 끄는 스위치가 있다. 불이 꺼져 있을 때 스위치를 누르면 불이 켜지고 다시 스위치를 누르면 불이 꺼진다. 처음에는 모든 전구가 꺼져 있다.
마부라는 사람은 특이한 행동을 한다. 복도에 n개의 전구가 있으면 복도를 n번 왕복한다. i번째 갈 때 그는 i로 나누어 떨어지는 위치에 있는 스위치만 누른다. 처음 위치로 돌아올 때는 아무 스위치도 건드리지 않는다. i번째 왕복은 (이런 이상한 행동을 하면서) 복도를 한 번 갔다가 오는 것으로 정의된다. 마지막 전구의 최종 상태를 알아내자. 과연 그 전구는 켜져 있을 까 아니면 꺼져 있을까?

입력
복도에 있는 n번째 전구를 나타내는 2^32-1이하의 정수가 입력된다. 0은 입력의 끝을 의미하며 그 값은 처리하지 않는다.

출력
그 전구가 켜져있으면 "yes"를, 꺼져 있으면 "no"를 출력한다. 테스트 케이스 마다 한 줄에 하나씩 출력한다.

입력 예
3
6241
8191
0

출력 예
no
yes
no


출처]
Programming Challenges 알고리즘 트레이닝 북(한빛미디어) : 문제 49 빛, 더 많은 빛(Light, More Light) p194

 

참고풀이]

#include <stdio.h>
#include <math.h>

int main()
{
   unsigned int n;
   unsigned int s;

   while(scanf("%lu",&n),n!=0)
   {
      if(n<=(unsigned int)pow(2,31)-1)
      {
         s=(unsigned int)sqrt(n);
         if(s*s == n) //n의 수가 완전수인지 체크 
            printf("yes\n");
         else
            printf("no\n");
      }
      else
         return 0;
   }
   return 0;
}

 

참고풀이 결과]

 

 

 

 

 

대한민국의 아름다운 영토, 독도의 겨울

 

반응형

댓글