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(1, 5000): val = generator(i) if (val >= 1) and (val < 5000): list.append(val) self_number = 0 for i in range(1, 5000): 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 | H = [[1],[0,1,2],[],[],[0,2],[],[],[1,2],[],[]] V = [[],[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+1 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 |
결과
(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 |