본문 바로가기

알고리즘

백준 1110번 문제 [지극히 개인적인 풀이 과정]

count = 0
n = int(input())
a = int((n-n%10)/10)+(n%10)
c = int(n%10*10+a)

print(n%10)  #왼쪽 1의 자릿수
print(a)     #오른쪽 1의 자릿수
print(c)     #부등호 좌측 1의 자릿수*10 + 오른쪽 1의 자릿수

우선 한번의 사이클이 돌아 갈 수 있게 코드를 작성 해봤다.

가독성도 떨어지고 다음 단계로 나아가기 어려워 수정해봤다.

 

문제를 풀기 위해서는 무언가 값을 구하고 구한 값을 다시 초기 값에 넣어주는 반복적인 형태임을 알게 되어 최근에 배운 재귀 함수를 사용하다가 도저히 아직 어려워서 while문으로 쓰기로 하고 while문 관련 내용을 조금 찾아봤다.

 

while True: 

위와 같이 무한반복 하는 것을 특정 조건에 맞게 break로 끊어주거나

 

while a>b:

위와 같이 while문에 조건을 써서 돌아가게 하는 방법이 있다. (a>b)일 때 반복, 그 외 반복 멈춤

자고로 여기서도 while 문 내부에서 break가 된다. 조건을 주고 해당 조건에 맞으면 break하게 가능하기 때문에 조건문 내부에 조건문을 쓰는 형태가 되겠다.

n = int(input())

print(n%10)    # 왼쪽 1의 자리
print(int((n-n%10)/10))  #왼쪽 10의 자리
print(n%10+int((n-n%10)/10)) # 오른쪽 값
print((n%10+int((n-n%10)/10))%10) # 오른쪽 1의 자리
print(int((n%10+int((n-n%10)/10)-(n%10+int((n-n%10)/10))%10)/10)) #오른쪽 10의 자리
print((n%10)*10+(n%10+int((n-n%10)/10))%10) # 왼쪽 1의자리*10 + 오른쪽 1의 자리 

계산을 정확하게 하기 위해 계산할 때 과정과 필요한 값을 찾으려고 프린트로 다양한 값들을 찾아봤다.

문제에서 필요한 것들을 보니

사이클이 몇번 돌아갔는지 count

input값을 주기 위한 변수 n

1사이클 돌 때 나온 값을 저장하기 위한 변수 v

n에 v를 넣었을 때 초기 인풋값을 알아야 하므로 변수 i = int(input()

 

총 4개의 변수가 필요함을 알게되었고, 다음과 같이 제출하였다. v는 (왼쪽 1의 자리*10) + 오른쪽 1의 자리 값 이기때문에 위에서 print로 구한 값을 복사 붙여넣었다.

count = 0
i = int(input())
n = i
while True: 
    v = (n%10)*10+(n%10+int((n-n%10)/10))%10
    n = v
    count += 1
    if n == i:
        break
print(count)

처음에 n = v를 탈출 조건으로 쓰고 while 문에도 n = v를 두니 반복이 한 번 밖에 안되서 당황했는데

변수를 하나 더 선언하고(i) 선언한 변수는 와일문이 돌아도 가만히 있는 초기값이기 때문에 해당 조건을 탈출 조건으로 설정하면 된다는 것을 알았다.(도와주신 분이 계시는데 정말 감사합니다.)