1단계 15596번 정수 N개의 합
def solve(a):
return sum(a)
2단계 4673번 셀프넘버
def d(n):
num = n
while True:
if (n == 0):
break
num += n % 10
n = n // 10
return num
selfNumberList = [True for _ in range(10001)]
for i in range(1, 10001):
notSelfNumber = d(i)
if notSelfNumber <= 10000:
selfNumberList[notSelfNumber] = False
for j in range(1, 10001):
if selfNumberList[j]:
print(j)
selfNumberList를 처음 초기화 할 때 True를 [True]라고 적어서 제대로 돌아가지 않은 걸 오랜시간 찾아 헤맸다 ㅠㅠ 저렇게 한 줄로 선언하는 방법에 조금 더 익숙해져야겠다.
d()는 매개변수 n(생성자)이 들어오면 자기자신과 각 자리수를 더한 값을 리턴한다.
selfNumberList는 10000번째 자리까지 True를 채운 리스트인데,
i에 대한 for문에서 d(i)에 대한 리턴값을 notSelfNumber라는 변수에 담고,
이 변수는 selfNumberList의 인덱스 값이 되어 그 인덱스 값은 셀프넘버가 아니기 때문에 False를 대입한다.
j에 대한 for문에서는 selfNumberList를 조회해 True값을 가지는 j들을 출력한다.
3단계 1065번 한수
def is_hansu(n):
result = False
if n < 100:
result = True
else:
n = str(n)
d = int(n[1]) - int(n[0])
for i in range(0, len(n)):
if i+1 == len(n): break
if int(n[i+1]) - int(n[i]) == d:
result = True
else:
result = False
break
return result
N = int(input())
count = 0
for i in range(1, N+1):
if is_hansu(i):
count += 1
print(count)
is_hansu()는 매개변수 n이 한수면 True, 한수가 아니면 False값을 리턴하게 만들었다.
두 자리수의 정수들은 모두 한수가 되고, 세 자리수 이상이 되었을 때는 공차 d 변수를 초기화 시켜주었다.
i는 매개변수인 정수를 문자열로 바꾸고 그 문자열의 인덱스값이 되는데,
인덱스 다음칸이 문자열의 길이와 같아질 때는 인덱스가 문자열의 길이를 초과하는 순간이 되기 때문에 반복문을 빠져나가게 했고('123'의 인덱스 값은 0,1,2고 길이는 3),
한 칸 앞자리 수와 현재 자리수의 차가 d와 같으면 결과 result 변수에 True를 담고 그렇지 않은 경우가 있으면 result는 False가 되고 반복문을 빠져나가게 했다.
N이 주어지면 is_hansu()에 1부터 N까지 삽입하여 True가 나온 개수를 count한다.
'Algorithm > 백준 단계별로 풀어보기' 카테고리의 다른 글
[백준 알고리즘 / Python] 기본 수학_1 - 1712번 손익분기점 (0) | 2021.09.16 |
---|---|
[백준 알고리즘/Python] 문자열 (0) | 2021.09.07 |
[백준 알고리즘/Python]1차원 배열 (0) | 2021.09.03 |
[백준 알고리즘/Python] while문 (0) | 2021.05.26 |
[백준 알고리즘/Python] for문 (0) | 2021.05.25 |