[백준] 2331번

그녕·2023년 3월 6일
0

백준 2331번

DFS/BFS

솔직히 dfs쓴지 잘 모르겠다...나중에 다시 알아봐야겠다.

💗내 풀이💗

이거 풀면서도 좀 어려웠다.. 두가지의 풀이 방법을 봤었는데 이 방법이 젤 쉬운거 같아서 이 풀이로 풀어보았다.

  1. 젤 처음에 57, 2 이렇게 주어져서 입력을 받아준다.
    57이라는 수를 리스트로 담아주기 위해서 num= [A]을 해준다. 즉 num이라는 리스트에 57이라는 숫자가 담겨 num= [57]이 된다.
    57이면 5**2 + 7**2를 해서 값은 74가 된다. 이를 계속 반복하게 되고 다시 74에 계산을 해줘야하니깐 num 리스트에 74도 append해준다. (이건 반복되지 않을때만 append 해줘야함)
    즉 num= [57,74,65,61,37,58,89,145,42,20,4,16...(37부터는 다시 반복)] 담기게 된다.

  2. 조건이 만약 반복되는 숫자가 나온다면 당장 멈추면 된다!
    그 다음 출력값은 반복되는 숫자의 인덱스가 된다. 그 전 인덱스까지 len을 써서 값을 셀려고 했는데 다시 생각해보니 그냥 그 인덱스 값이 4이므로 그냥 인덱스 값을 출력해주면 된다.

  • 여기서 어려웠던 점은 num리스트에 담겨 있는 맨 마지막 값을 다시 계산을 해줘야하니깐 for문을 쓸때, str(num)을 쓰는게 아니라 str(num[-1])을 적어야한다. list[-1]이라는 값은 list에서 제일 마지막 값을 의미한다. 즉 list= [1,2,3] 이면, list[-1]은 3이 된다.

💗내 코드💗

A, P= map(int,input().split())
num=[A]

while True:
    sum=0
    for i in str(num[-1]):
        sum += int(i)**P
    if sum in num:
        break
    num.append(sum)
print(num.index(sum))

0개의 댓글