반응형
0. 개요
- while문을 많이 써보지 않아 공부할 겸 정리 하려 한다.
- 해당 문제풀이는 보시는 분의 개발공부에 전혀 도움이 안될 것이니 참고만 해주길 바란다.
- 하지만 지적은 늘 감사하게 확인하고 공부하겠다.
1. 문제
2. 문제 해석
1) 0<=N<=99 가 주어 진다.
- 입력이 하나며, 그냥 두자리의 정수라는 뜻
2) N이 10보다 작다면 앞에 0을 붙여 두자리로 만들라.
- 문제에서 주는 N, 또는 너가 풀다가 다시 반복해야 할 N이 한 자리수 이면 이앞에 0을 붙혀 두자리로 만들어라는 뜻
- 예) N = 3 이면 N = 03 으로 만들어라
3) N의 뒷자리 수와 각각 자리수를 더한 수의 뒷자리 수를 합쳐 새로운 수를 만들어라
- 예) N = 10이면 0(N의 뒷자리) + 1(1+0) = 01--> 새로운 수 ...반복
4) 반복 후 새로운 수가 N과 같아지면 사이클의 횟수를 구하라
3. 예외 및 특이사항
1) N이 한 자리 수가 되는 경우
- 동기의 도움으로 더 간단해 지는 조건임을 알았다.
- 다음 배열을 보자
# 1 ▶︎ 0+1=1 ▶︎11 ▶︎ 1+1 =2 ▶︎ 12 ▶︎ 1+2=3 ▶︎ 23..... ///// 2 ▶︎ 0+2=2 ▶︎ 22 ▶︎ 2+2=4 ▶︎ 24 ▶︎ 2+4=6 ▶︎ 46 ....
- 규칙이 보이는가? 그렇다.
- 규칙같은건 없고 처음 N이 한 자리 일때만 집중하자
- 그부분을 코드로 하면 다음과 같다.
N = input()
a=N
while True:
if a <10:
a = a*10+a
count1+=1
4. 코드 풀이
import sys
N = int(sys.stdin.readline()) # 주어진 정수
a=N # while문이 끝날때 N과 비교 하기 위한 전환
count1 = 0 # 몇번 돌았는지를 확인 하기 위한 카운트
while True: # 조건이 없는 한 무한으로 도는 while문
if a <10: # 위에서 확인한 규칙 적용
a = a*10+a
count1+=1 # 이 과정도 한번 반복되는 사항으로 카운팅
elif a>=10:
b=(a//10)+(a%10) # N(a)을 만들기 위한 정수 덧샘
# 덧샘 값이 두자리 일때와 한 자리 일때를 구분 해서 처리 방법을 나눈다.
# 더할때는 문자열로 더하고 다시 int(정수)로 바꾼다.
# 각각의 if 문이 지날때 카운팅 되어야 함.
if b >=10:
a = str(a%10)+str(b%10)
a=int(a)
count1+=1
else:
a = str(a%10)+str(b)
a=int(a)
count1+=1
if a == N: # while 문을 돌다가 a가 최초 N값과 같다면 count1 출력 후 break
print(count1)
break
반응형
'Develop > Algorithm' 카테고리의 다른 글
[문제풀이]백준 2805 나무자르기 (0) | 2022.10.01 |
---|---|
[문제풀이]백준 1920 수찾기 (0) | 2022.10.01 |
[정렬알고리즘]퀵정렬 및 변수 할당 개념(python) (0) | 2022.09.30 |
[기초수학]소수 판별하기 (0) | 2022.09.30 |
[기초수학]정수의 자리수 구하기 (0) | 2022.09.29 |