반응형
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을 넣을 필요는 없었다.
이번에 새로 풀었을 때는 전에 풀었던 내 코드를 안 본 상태에서 작성했는데 요즘 알고리즘을 더 열심히 공부하고 있어서 그런지 내가 좀 더 똘똘해졌나보다. 훨씬 더 간결해진 코드를 보니까 뿌듯하다!
반응형
'Algorithm > 백준 단계별로 풀어보기' 카테고리의 다른 글
[백준 알고리즘/Python] 함수 (0) | 2021.09.07 |
---|---|
[백준 알고리즘/Python]1차원 배열 (0) | 2021.09.03 |
[백준 알고리즘/Python] for문 (0) | 2021.05.25 |
[백준 알고리즘/Python] if문 (0) | 2021.05.25 |
[백준 알고리즘/Python] 입출력과 사칙연산 (0) | 2021.05.24 |