Light More Light

출처: programming challenges

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

Input

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

Output

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

Sample Input

3
6241
8191
0

Sample Output

no
yes
no
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

25개의 풀이가 있습니다. 3 / 3 Page

while True:
    n = int(input(":"))
    if n == 0:
        break
    flag = False
    for i in range(1, n + 1):
        if n % i == 0:
            flag = not flag
    print('yes' if flag else 'no')

Python 3.5.2에서 작성하였습니다.

다른분 풀이를 보고 다시 작성했습니다..

import math
while True:
    n = int(input(":"))
    if n == 0:
        break
    print('yes' if math.sqrt(n) % 1 == 0 else 'no')

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def chk_light(num):
    val,count = 0,1
    while num != 0:
        val = count * count
        if val == num:
            return 'yes'
        elif val > num:
            return 'no'
        else:
            count += 1

_list = list()
while _list == [] or _list[-1] != 0:
    _list.append(int(input()))

for x in range(len(_list)-1):
    print(chk_light(_list[x]))

#### 2016.12.30 D-419 ####
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <stdio.h>
#include <stdlib.h>

void main() {
    int n = 8191;
    int* arr = (int*) malloc (sizeof(int) * n);
    for(int i=0;i<n;i++)
        arr[i] = 0;

    for(int i=1;i<=n;i++) {
        for(int j=1;j<=n;j++) {
            if(j%i==0)
                arr[j-1] = arr[j-1]*-1 +1;
        }
    }
    if(arr[n-1]==1)
        printf("yes\n");
    else
        printf("no\n");
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def light_more(data):
    for i in data:
        if i!=0:
            print("yes" if sum(1 for j in range(1,i+1) if i%j==0)%2==1 else "no")
        else:
            return
light_more([3, 6241, 8191, 0])

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import static java.lang.System.in;

public class LightMoreLight {

    public static void main(String[] args) {
        Scanner sc = new Scanner(in);
        List<Long> l = new ArrayList();
        while (sc.hasNext()) {
            Long i = sc.nextLong();
            if (i == 0L) break;
            l.add(i);
        }

        for (Long i : l) {
            System.out.println(solved(i) % 2 == 1 ? "yes" : "no");
        }
    }

    private static int solved(Long i) {
        List<Long> l = new ArrayList();
        Long len = i;
        l.add(1L);
        l.add(i);
        for (Long j = 2L; j < len; j++) {
            if (i % j == 0L) {
                l.add(j);
                Long x = i / j;
                if(x != j) l.add(x);
                len = x - 1;
            }
        }
        return l.size();
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

※ 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.


언어별 풀이 현황
전 체 x 25
java x 2
python x 15
기 타 x 3
ruby x 2
perl x 1
cs x 1
cpp x 1