Dev Ops/Algorithm 코딩도장 풀이1(feat.python)
  • 728x90
    반응형



    CODING DO JANG 문제풀이1





    넥슨 입사문제 중에서



    어떤 자연수 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, 4, 5, 7, 9, 20, 31 은 셀프 넘버 들이다.


    1 이상이고 5000 보다 작은 모든 셀프 넘버들의 합을 구하라.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    def generator(n):
        str_n = str(n)
        sum = n
        for list in str_n:
            sum += int(list)
        return sum
     
    list = []
    for i in range(15000):
        val = generator(i)
        if (val >= 1and (val < 5000):
            list.append(val)
     
    self_number = 0
    for i in range(15000):
        if not i in list:
            self_number += i
     
    print(self_number)
     
     
    cs


    다음은 다른 유저의 코드이다.




    Spiral Array



    문제는 다음과 같다.



    6 6


      0   1   2    3    4    5

    19  20  21  22   23   6

    18  31  32  33   24   7

    17  30  35  34   25   8

    16  29  28  27   26   9

    15  14  13  12   11  10



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    from itertools import cycle
     
    def matrix(x, y):
        size = x * y
        m = [''* size
        m[:x] = list(range(x))
     
        index = x-1
        p = index
        s = index
        pattern = [x, -1-x, 1]
        for pat in cycle(pattern):
            while True:
                p += pat
                s += 1
                if p < size and m[p] == '':
                    m[p] = s
                else:
                    p -= pat
                    s -= 1
                    break
            if '' not in m:
                return m
     
    x, y = map(int, input().split())
    for i, a in enumerate(matrix(x, y), 1):
        print('{:2d}'.format(a), end=' ')
        if i % x == 0:
            print()
     
    cs


    결과



    LCD Display



    입력


    입력 파일은 여러 줄로 구성되며 표시될 각각의 숫자마다 한 줄씩 입력된다. 각 줄에는 s와 n이라는 두개의 정수가 들어 있으며 n은 출력될 숫자(0<=n<= 99,999,999), s는 숫자를 표시하는 크기(1<=s<10)를 의미한다. 0이 두개 입력된 줄이 있으면 입력이 종료되며 그 줄은 처리되지 않는다.


    출력


    입력 파일에서 지정한 숫자를 수평 방향은 '-' 기호를, 수직 방향은 '|'를 이용해서 LCD 디스플레이 형태로 출력한다. 각 숫자는 정확하게 s+2개의 열, 2s+3 개의 행으로 구성된다. 마지막 숫자를 포함한 모든 숫자를 이루는 공백을 스페이스로 채워야 한다. 두 개의 숫자 사이에는 정확하게 한 열의 공백이 있어야 한다. 


    각 숫자 다음에는 빈 줄을 한 줄 출력한다. 밑에 있는 출력 예에 각 숫자를 출력하는 방식이 나와있다.



    입력 예


    2 12345

    3 67890

    0 0 


    출력 예



        --   --             --

    |      |     |    |   |  |

    |      |     |    |   |  |

        --   --      --     --

    |  |         |       |       |

    |  |         |       |       |

        --   --             --


      ---   ---     ---    ---     ---

    |            |  |     |  |     |  |    |

    |            |  |     |  |     |  |    |

    |            |  |     |  |     |  |    |

      ---           ---     ---   

    |      |     |  |     |        |  |    |

    |      |     |  |     |        |  |    |

    |      |     |  |     |        |  |    |

      ---           ---     ---    ---

     


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    = [[1],[0,1,2],[],[],[0,2],[],[],[1,2],[],[]]
    = [[],[0,2],[0,3],[0,2],[2],[1,2],[1],[0,2],[],[2]]
     
    def printH(number, idx, n):
        arr = ""
        for num in number:
            if idx in H[int(num)]:
                arr += " "*(n+2+ " "
            else:
                arr += " "+"-"*n+"  "
        return arr
     
    def printV(number, idx, n):
        arr = ""
        for num in number:
            if idx in V[int(num)]:
                arr += ' '+" "*n
            else:
                arr += '|'+" "*n
     
            if idx+in V[int(num)]:
                arr += '  '
            else:
                arr += '| '
        return arr
     
    def lcdN():
        while True:
            n,numbers = input().split()
            n = int(n)
            for i in range(3):
                print(printH(numbers, i, n))
                if i<2:
                    for j in range(n):
                        print(printV(numbers, i*2, n))
     
    lcdN()
    cs


    결과


    728x90
    반응형

    'Dev Ops > Algorithm' 카테고리의 다른 글

    (2017)KAKAO BLIND RECRUITMENT [1차] 비밀지도(feat.python)  (0) 2018.11.20
    Python 코딩도장 풀이2  (0) 2017.08.09
    Python checkio 문제풀이4  (0) 2017.08.07
    Python checkio 문제풀이 3  (0) 2017.07.28
    Python checkio 풀이2  (0) 2017.07.27
상단으로