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

[백준 알고리즘/Python] while문

베이비코더 2021. 5. 26. 16:34
반응형
1단계 10952번 A+B -5
import sys

while 1:
    A, B = map(int, sys.stdin.readline().split())
    if A == 0 and B == 0:
        break
    print(A+B)

 

2단계 10951번 A+B -4
import sys

while 1:
    try:
        A, B = map(int, sys.stdin.readline().split())
        print(A+B)
    except:
        break

A와 B에 아무것도 입력되지 않는 경우 에러가 발생하므로 try~except로 예외 처리해서 아무 입력이 없을 경우 break로 while문을 탈출하고 종료된다.

 

3단계 1110번 더하기 사이클
N = int(input())

oldNum = N
cycle = 0

while True:
    if oldNum < 10:
        ten = 0
        one = oldNum
    else:
        ten = oldNum/10
        one = oldNum%10
    
    calNum = ten+one
    oldNum = newNum = int((one*10) + (calNum%10))
    cycle += 1
    
    if newNum == N:
        break

print(cycle)

 

# 2021-09-02

realN = int(input())
n = realN
cycle = 0

while True:
	num = (n//10) + (n%10)
	n = ((n%10)*10) + (num%10)
	cycle += 1
		
	if(realN == n):
		break
print(cycle)

문제에서는 26부터 시작해서

2+6=8 <68> - cycle1

6+8=14 <84> - cycle2 

8+4=12 <42> - cycle3

4+2=6 <26> - cycle4, 사이클 길이가 4인 예시를 보여주었다.

 

처음 시작하는 수를 realN에 담고 결과를 보여줄 사이클 수는 cycle=0으로 초기화 해주었다.

num 변수는 위 예시에서 <>안에 있는 수의 10의 자리와 1의 자리를 더한 값(밑줄 친 값)이고,

n은 새롭게 만들어진 <>안의 수를 담아주었다.

그렇게 새롭게 n이라는 수가 만들어지면 cycle에 1을 더해주고, 처음 시작했던 수 realN과 비교하여 같을 경우 while문을 빠져나가도록 작성했다.

 

처음 이 문제를 풀었을 때는 주어진 수가 10보다 작을 경우 앞에 0을 붙여야 된다는 말에 10의 자리에 0을 넣어야 된다고 생각했었다.  num = (n//10) + (n%10) 에서 n이 한자리수이면 (n//10) = 0 이기에 예전 코드처럼 10의 자리 변수에 0을 넣을 필요는 없었다.

 

이번에 새로 풀었을 때는 전에 풀었던 내 코드를 안 본 상태에서 작성했는데 요즘 알고리즘을 더 열심히 공부하고 있어서 그런지 내가 좀 더 똘똘해졌나보다. 훨씬 더 간결해진 코드를 보니까 뿌듯하다!

반응형