Algorithm/백준 단계별로 풀어보기

[백준 알고리즘/Python] 함수

베이비코더 2021. 9. 7. 02:18
반응형
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한다.

반응형