Coding/Baekjoon

[백준] 단계별로 풀어보기 - 4. while문 (python3) (10951, 1110)

jir4vvit 2022. 1. 6. 22:35
깃허브 링크 : https://github.com/jiravvit/coding-test/tree/main/baekjoon/04_while_Loop

 

10951번 A+B - 4 (링크)

(1) C

처음에 이 문제를 봤을 때 while 안에서 종료조건을 어떻게 해야할지 모르겠어서 먼저 C로 한번 짜봤었다.

#include <stdio.h>

int main(void)
{
  int a,b = 0;

  while(scanf("%d %d", &a, &b)!=EOF)
    printf("%d\n", a+b);
  
  return 0;
}

C였으면 파일 끝을 알리는 EOF에 다다르면 종료시키려고 했다.

 

(2) Python3

python으로는 어떻게 짜야할 지 감이 안와서 일단 종료조건 생각안하고 코딩을 했더니 아래와 같은 에러를 만났다.

그래서 try catch로 에러를 만나면 break 줘서 while문을 빠져나오는 방법을 생각했다.

(참고로 위의 저 에러는, 입력 값 두개가 와야하는데 안와서 ValueError가 뜬 것 같다.)

 

import sys

while True:
    try:
        a, b = map(int, sys.stdin.readline().split())
        print(a+b)
    except:
        break

혹시 몰라서 다른 분의 풀이도 살펴봤는데, 대부분 다 이렇게 푸신 것 같았다.

 

 

1110번 더하기 사이클 (링크)

이 문제는 캡쳐를 생략한다.

 

26, 2+6=8, 68, 6+8=14, 84, 8+4=12, 42, 4+2=6, 26

26의 사이클은 4이다. 

26을 입력했을 때 사이클인 4를 출력하면 된다.

 

input()함수를 이용해서 입력을 받으면 파이썬은 이것을 바로 str로 저장해버린다.

문자열의 특성을 이용해서 문제를 풀었다.

이때 사알짝 까다로운 점은, 입력값이 한자리이거나(!), 덧셈 결과가 한자리일 때(!) 이 두 가지를 고려해야한다는 것이다.

import sys

n = input()
cnt = 0
ori = n

if len(n)<2:
    n = '0'+n # 문제에서 말해줌

while(True):
    if len(str(int(n[0])+int(n[1]))) < 2:
        n = n[1] + str(int(n[0])+int(n[1]))
    else:    
        n = n[1] + str(int(n[0])+int(n[1]))[1]
    cnt += 1
    if int(ori) == int(n): 
        print(cnt)
        break

문자열의 길이를 재서 수가 한자리일때를 체크했다.