-
1일차 따라해보기 2Python 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 댓글