ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1일차 따라해보기 2
    Python 2017. 3. 23. 18:38
    # 파일로 실행하기 --- 반드시 UTF-8로 저장해야 한글이 정확하게 출력됨!!!
    height = int(input("몇줄짜리?"))
    for i in range(1,height+1):
    print("☆"*i)
    print()
    height = int(input("몇줄짜리?"))

    for i in range(1,height+1):
    print(" "*(height-i), end="")
    print("☆"*(i*2-1))
    print()
    import random

    print(random.sample(range(1,46),6))
    lotto = random.sample(range(1,46),6)
    print(type(lotto))
    print(lotto)
    lotto.sort()
    print(lotto)
    import random

    game = int(input("몇게임?"))
    for i in range(0,game):
    lotto = random.sample(range(1,46),6)
    lotto.sort()
    print(i+1,"게임 : ", lotto)
    """
    구글 입사문제 중에서
    --------------------
    1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가?
    8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다.
    (※ 예를들어 8808은 3, 8888은 4로 카운팅 해야 함)
    """
    """
    풀이 방법

    10,000 에는 8 이 없으니 무시하고, 1 부터 9999 까지
    X X X 8 인 경우 : 1,000개 ( X X X 는 세자리이므로 0 0 0 ~ 9 9 9 까지 천개)
    X X 8 X 인 경우 : 1,000개 ( X X X 는 세자리이므로 0 0 0 ~ 9 9 9 까지 천개)
    X 8 X X 인 경우 : 1,000개 ( X X X 는 세자리이므로 0 0 0 ~ 9 9 9 까지 천개)
    8 X X X 인 경우 ; 1,000개 ( X X X 는 세자리이므로 0 0 0 ~ 9 9 9 까지 천개)
    총 4,000 개 아닌가?
    """
    """
    Java로 풀면

    public class CountingEight {
    public static void main(String[] args) {
    for (int i=0; i<=10000; i++){
    searchEight(i);
    }
    System.out.println("1에서 10,000 사이에 존재하는 8의 개수는? "+count);
    }
    private static int count = 0;
    public static void searchEight(int num){
    if (num%10==8) count++;
    if (num>10) searchEight(num/10);
    }
    }
    """
    """
    C로 풀면

    int count = 0;
    for(int i = 1; i < 10001; i++)
    {
    for(int j = i; j > 0; j /= 10)
    {
    if(j % 10 == 8)
    {
    count++;
    }
    }
    }

    """
    # 그럼 파이선은?
    print(str(list(range(1, 10001))).count('8'))
    """
    넥슨 입사문제 중에서

    어떤 자연수 n이 있을 때, d(n)을 n의 각 자릿수 숫자들과 n 자신을 더한 숫자라고 정의하자.
    예를 들어
    d(91) = 9 + 1 + 91 = 101
    이 때, n을 d(n)의 제네레이터(generator)라고 한다. 위의 예에서 91은 101의 제네레이터이다.
    어떤 숫자들은 하나 이상의 제네레이터를 가지고 있는데, 101의 제네레이터는 91 뿐 아니라 100도 있다.
    그런데 반대로, 제네레이터가 없는 숫자들도 있으며, 이런 숫자를 인도의 수학자 Kaprekar가 셀프 넘버(self-number)라 이름 붙였다.
    예를 들어 1,3,5,7,9,20,31 은 셀프 넘버 들이다.
    1 이상이고 5000 보다 작은 모든 셀프 넘버들의 합을 구하라.
    """
    print(sum(set(range(1, 5000)) - {x + sum([int(a) for a in str(x)]) for x in range(1, 5000)}))

    # 처음
    def d_fn(n):
    y = n
    while n > 0:
    y += n % 10
    n //= 10
    return y

    Z = [d_fn(n) for n in range(5000)]
    A = [n for n in range(5000) if n not in Z]
    print (sum(A))

    # 다음
    def d_fn2(n): return (n + sum([int(x) for x in str(n)]))

    Z = [d_fn2(n) for n in range(5000)]
    A = [n for n in range(5000) if n not in Z]
    print (sum(A))

    # 그리고 다시 다음
    def d_fn3(n): return (n + sum([int(x) for x in str(n)]))

    S = set(range(5000))
    Z = set([d_fn3(n) for n in range(5000)])
    print (sum(S-Z))

    # 파이썬의 def를 사용하지 않고 set() 의 차집합을 이용해서 작성해보았습니다.
    nums = range(1,5001)
    selfnums = set(nums) - set([sum([int(ii) for ii in str(num)]) + num for num in nums])
    print(sum(selfnums))

    """
    아~~~ JAVA

    public static void main(String[] args)
    {
    calculateNumbersHasGenerator();
    int sum = 0;
    for (int i = 0; i < 5001; i++)
    if (!hasGenerator(i))
    sum += i;
    System.out.println("합 : "+sum);
    }

    private static boolean hasGenerator(int num)
    {
    return numbersHasGenerator.contains(num);
    }

    private static ArrayList<Integer> numbersHasGenerator;

    private static void calculateNumbersHasGenerator()
    {
    numbersHasGenerator = new ArrayList<Integer>();
    for (int i = 0; i <= 5000; i++)
    {
    String num = String.valueOf(i);
    int no = 0;
    for (int n = 0; n < num.length(); n++)
    no += Integer.parseInt(num.substring(n, n + 1));
    numbersHasGenerator.add(no + i);
    }
    }
    """



    'Python' 카테고리의 다른 글

    1일차 따라해 보기  (0) 2017.03.23

    댓글

Designed by Tistory.