옥수수와 식빵 그리고 코딩

백준 문제 풀이 while문 본문

BaekJoon

백준 문제 풀이 while문

옥식 2021. 10. 20. 22:45

10952번

sys.stdin.readline() 사용

import sys

while True:
    a,b = map(int,sys.stdin.readline().split(' '))
    result = a + b
    if result == 0:
        break
    print(result)

input()을 써서 풀어도 됨

while True:
    a,b = map(int, input().split(' '))
    result = a + b
    if result == 0:
        break
    print(result)

10951번

어떻게 빠져나가지?

안 빠져 나가도 되는건가?

while True:
    a,b = map(int, input().split(' '))
    result = a + b
   
    print(result)

안된다. 런타임 오류가 뜬다.

while 조건문을 False로 만드려 하니 입력값에서 False로 만들 만한게 없다.

점투파를 다시 봐도 모르겠어서 컨닝 한다.

!! try문을 사용하면 됨!!

https://wikidocs.net/30#try-except

 

try:
    while True:
        a,b = map(int, input().split(' '))
        result = a + b
        print(result)
except:
    break

SyntaxError: 'break' outside loop 발생

break는 for나 while 아래에서밖에 못 쓴다고 외우시면 될 것입니다. 그래서 "break outside loop"가 오류인 겁니다.

https://hashcode.co.kr/questions/10326/python-break-outside-loop-%EC%98%A4%EB%A5%98%EC%A7%88%EB%AC%B8%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4
try:
    while True:
        a,b = map(int, input().split(' '))
        result = a + b
        print(result)
except:
    print('error')

이렇게 하면 try안에서 오류가 발생 했을 때 while문을 빠져 나오고 error 메시지를 출력하며 끝낸다.

하지만 문제에서는 error메시지가 출력되면 안되기 때문에 while문 안에 try, excpt를 집어넣어 break를 넣도록 한다.

 

while True:
    try:
        a,b = map(int, input().split(' '))
        result = a + b
        print(result)
    except:
        break

1110번  !!!!!!!!!!!!!!!!!!!!!

오....신박한 문제다...

x = input()
if x < 10:
    x = int('0'+'x')
while result != int(x):
    result = int(x[0]) + int(x[1])

여기까지는 코드를 짰는데 사이클의 길이는 어떻게 구하는지 모르겠다.

count 변수에 while문이 한번씩 돌 때 마다 1을 더한다.

x = input()
origin = x
if int(x) < 10:
    x = int('0'+'x')
count = 0

while result != origin:
    result = int(x[0]) + int(x[1])
    x = result
    count += 1

그리고 대체게 오류난다.

while문 안의 result가 정의되지 않아 오류가 발생했다.

x = input()
origin = x
if int(x) < 10:
    x = int('0'+'x')
count = 0

while True:
    nx = x
    if int(nx) < 10:
        nx = int('0'+'nx')
    result = int(nx[0]) + int(nx[1])
    nx = result
    count += 1
    if result == int(origin): # result가 아니라 nx가 와야 함. 처리과정이 너무 길어져서 멈춘것
        break
print(count)

....뭐가 잘 못 된걸까... 프로그램이 멈췄다...

x = input()
origin = x

count = 0

while True:
    if int(x) < 10:
        x = 0 + x
    result = str(int(x[0])) + str(int(x[1]))
    x = int(result[0]) + int(result[1])
    
    count += 1
    if result == int(origin):
        break
print(count)

대차게 오류난다.

다른 사람들 풀이를 보니 int(x) < 10 대신 len함수를 써서 바꿔보았다.

x = input()
origin = x

count = 0

while True:
    if len(x) == 1:
        x = '0' + x
    result = str(int(x[0]) + int(x[1]))
    x = str(int(x[0]) + int(x[1]))
    count += 1

    if result == origin: # result말고 x와야 함
        break

또 멈춤...미쳐버리겠다

이젠 걍 정답을 아주 샅샅이 보고 분석하겠다.........

x = input()
origin = x

count = 0

while True:
    if len(x) == 1:
        x = '0' + x
    result = str(int(x[0]) + int(x[1]))
    x = x[-1] + result[-1] # result가 한자리 일 수도 있으므로 result(1) 대신 result(-1)
    count += 1

    if result == origin: #result 말고 x
        print(count)
        break

또류, 또 오류란 뜻

또멈, 또 멈췄다는 뜻

x = input()
origin = x

count = 0

while True:
    if len(x) == 1:
        x = '0' + x
    result = str(int(x[0]) + int(x[1]))
    x = x[-1] + result[-1] # result가 한자리 일 수도 있으므로 result(1) 대신 result(-1)
    count += 1

    if x == origin: # 문제를 이해하자...
        print(count)
        break

이어붙인 수 : x

새로운 수 : result

원래 수 : origin

이어붙인 수와 원래 수가 같으면 멈추는 거!!!!!!

이런 미친 시간 초과 뜸!!!!!!!!!!!!!!!!!

 

결과 자체는 나오는데 시간초과가 뜨니 아예 새로운 방법으로 해야 한다.

x = int(input())
origin = x

count = 0
while True:
    a = x // 10 #26에서 2
    b = x % 10  #26에서 6
    c = a + b
    x = b*10 + c%10
    count += 1

    if x == origin:
        print(count)
        break

아주 미쳐버리는 줄 알았지만...어찌어찌 했다...

Comments