Ones

출처: programming challenges

2나 5로 나눌 수 없는 0 이상 10,000 이하의 정수 n이 주어졌는데, n의 배수 중에는 10진수로 표기했을 때 모든 자리 숫자가 1인 것이 있다. 그러한 n의 배수 중에서 가장 작은 것은 몇 자리 수일까?

Sample Input

3
7
9901

Sample Output

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

69개의 풀이가 있습니다. 7 / 7 Page

매트랩으로 도전하였습니다. 111은 3의 배수, 111111은 7의 배수이므로 자연수 n을 입력 받았을때 1부터 11, 111, 1111 계속 계산하여 찾는 방식으로 구하였습니다.

n = input('# 3) Input number :');
[exp x] = deal(1);
for i = 1 : 10^5
    if (mod(n, 2)==0) || (mod(n, 5)==0)  % 2 or 5의 배수를 입력받으면 다시 입력
        n = input('Input number :');
        continue
    elseif mod(x, n) == 0
        break
    end
    x = x + 10^exp;   % ex) 111 = 11 + 100
    exp = exp + 1;
end
disp(i)
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
public class Ones {
    public static void main(String[] args){
        int n=9901;
        int res=1;
        String ones=new String("1");

        while(Long.parseLong(ones) % n != 0){
            ones=ones.concat("1");
            res+=1;
        }
        System.out.println(res);
    }
}

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

void main() {
    double n = 9901;
    double temp = 1;
    int i = 0;
    while(i<13) {
        i++;
        if(0==fmod(temp,n))
            break;
        temp = temp * 10 +1;
    }
    printf("%d", i+1);
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def one(n):
    m=1
    while m%n!=0: m=m*10+1
    return len(str(m))
one(9901)
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import java.util.Arrays;
import java.util.Scanner;

public class Ones {

    public static void main(String[] args) {

        long n = new Scanner(System.in).nextLong();
        long c = 0;

        while (true) {
            long nc = n * c;
            String[] snc = String.valueOf(nc).split("");
            if (Arrays.asList(snc).stream().allMatch(i -> i.equals("1"))) {
                System.out.println(snc.length);
                break;
            }
            c++;
        }
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬 3.5.3 연습용 코드입니다.

n = 0
a = ''

arg='1'*10000

def getstr():
    global n
    global a

    if n == 0:

        a = input("2나 5로 나눌 수 없는 0이상 10,000 이하의 정수를 입력하세요 : ")
        if int(a) % 2 == 0 or int(a) % 5 == 0:
            n += 1
            getstr()


    elif n > 0:

        a = input("다시 입력하세요 : ")
        if int(a) % 2 == 0 or int(a) % 5 == 0:
            getstr()

        else:
            n = 0

getstr()


while 1>0:
    for x in range(1,10000):
        if int(arg[0:x+1]) % int(a) == 0:
            print(len(arg[0:x+1]))
            break

    break

2017/03/06 18:25

JH

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

정계산으로 하면 너무 많은 메모리가 소모되므로 역으로 계산. 2와 5의 배수가 아닌 10000 이하의 정수를 n으로 받고, 이 n으로 11, 111,1111, .... 111111~ 을 나누었을때 나머지가 0이 되는 값을 찾음.

import java.util.*;

public class onecounter {
    public static void variable(){

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();     

        String one_num = "";
        while (true){
            one_num += "1";
            if (Long.parseLong(one_num)%n == 0){System.out.println(one_num.length());break;}
            else {continue;}
        }
    }

    public static void main(String[] args){
        onecounter.variable();
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
public class Ones {
    private static boolean divide_two_five(int n) {
        if (n%2==0||n%5==0){
            return false;
        }
        return true;
    }
    private static int f_one(int n) {
        if (n<0||n>10000){return -2;}
        if (!(divide_two_five(n))){return -1;}
        int count_ten = 1;
        long number = 1;

        while (!(number%n==0)){
            number = (long) (number + Math.pow(10, count_ten));
            count_ten++;
        }

        return count_ten;
    }

    public static void main(String[] args) {
        System.out.println(f_one(3));
        System.out.println(f_one(7));
        System.out.println(f_one(9901));
        //0보다 작거나 10000보다 크면 -2
        //2나 5로 나눠지면 -1
        System.out.println(f_one(9900));
    }

}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
private static void getMinAllOne(int input){
        if(input < 0 || input > 10000){
            System.out.println("0 이상 10000 이하의 수를 입력하세요.");
        }else{
            if(input%2==0 || input%5==0){
                System.out.println("2 또는 5로 나눌수 있는 수 입니다.");
            }else{
                String allOne = "";

                while(true){
                    allOne += "1";

                    if(allOne.length() < 21){
                        if(Long.parseUnsignedLong(allOne) % input == 0){
                            break;
                        }
                    }else{  //UnsignedLong 범위를 벗어나는 경우
                        BigInteger parseAllOne = new BigInteger(allOne);
                        if(parseAllOne.mod(BigInteger.valueOf(input)) == BigInteger.ZERO){
                            break;
                        }
                    }
                }

                System.out.println(allOne.length());
            }
        }
    }

2017/04/19 12:28

yh

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

풀이 작성

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

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


언어별 풀이 현황
전 체 x 69
python x 39
java x 15
기 타 x 6
php x 1
cs x 3
scala x 2
cpp x 1
ruby x 1
matlab x 1