[단계별로 풀어보기] - 반복문

양진혁·2022년 10월 28일
0

백준

목록 보기
2/21

2739_구구단🧮


풀이:

N = int(input())
for i in range(1,10):  #i에 1~9를 하나씩 대입해 i를 1~9까지의 범위를 반복하게 해라. 
    print(N, '*', i, '=', N*i)




📌필요지식
1) for문 사용정의

  • for문을 작성하게 되면 in 뒤에 위치한 반복 가능한 iterable 자료형의 요소를 하나씩 꺼내서 변수에 선언하게 됩니다. 이번 문제에서는 iterable 자료형 위치에 range 함수를 이용해서 1부터 9까지의 숫자 범위를 입력하였습니다. 1부터 9까지 하나씩 꺼내지는 숫자는 2 { i } = { 2 i }와 같은 형태에서 ' i ' 위치에 들어오게 됩니다.

2)range문 사용정의

  • range 함수는 일정한 규칙을 가진 숫자 iterable 자료형을 생성할 수 있는 유용한 함수입니다. 이 문제 이후에도 백준 온라인 저지 문제를 풀 때 자주 사용하게 됩니다. range 함수로 숫자 범위를 지정할 때 주의해야 할 점은 괄호 안에 숫자 2개를 입력하는 경우 (시작 값, 종료 값) 이 되는데 이 범위는 시작 값 <= i < 종료 값 범위로 출력됩니다. 즉, 시작 값은 숫자 범위에 포함되지만 종료 값은 포함되지 않습니다.

10950_A+B를 N번 반복


풀이:

N = int(input())
for _ in range(N): #반복할 변수가 없으므로 변수 칸에 '_'을 넣고 ':'다음에 나올 내용을 N만큼 반복해라. 
    A,B = map(int, input().split())
    print(A+B)




📌필요지식
1) for _ in range(N)

  • for반복문은 [ for 변수 in iterable자료형 ] 형태로 첫째줄을 작성할 수 있습니다. 이때, 반복 가능한 iterable 자료형의 요소 하나하나를 for문 안에서 사용해야 한다면 for과 in사이의 변수에 선언해서 이용할 수 있습니다. 그런데 이번 문제는 테스트 케이스로 입력받은 수 N만큼 반복을 하는 것이 중요하고 range 함수로 생성된 숫자 요소를 변수로 선언하여 사용할 필요는 없습니다. 이런 경우 for과 in 사이를 언더바 ( _ )로 표현하는 것도 가능합니다.

8393_1부터 n까지합﹢


풀이:

n = int(input())

total = 0
for i in range(1, n+1):
    total += i 
print(total)

25304_영수증📃

풀이:

X = int(input())
N = int(input())
sum = 0
for i in range(N):
    a,b= map(int, input().split())
    sum += a*b
if sum == X:
    print('Yes')
else:
    print('No')

15552_빠른 A+B +


풀이:

import sys  #sys모듈 읽어들이기

t = int(sys.stdin.readline())  #sys.stdin.readline() = input()

for _ in range(t):
    a,b = map(int, sys.stdin.readline().split())
    print(a+b)




📌필요지식
1) stdin.readline

  • 이번 문제는 문자를 입력받는 input 함수 대신 sys모듈 안의 stdin.readline 함수를 사용하는 문제입니다. 백준 온라인 저지에서 문제를 풀면 제출한 코드를 실행시키는데 걸리는 시간을 확인할 수 있습니다. 그리고, 그동안 풀었던 문제들에서 input 함수 대신 sys모듈 안의 stdin.readline 함수를 사용하면 시간이 단축되는 것을 볼 수 있습니다. 코드가 실행되는 시간을 줄일 때 유용하게 이용할 수 있는 함수입니다.

  • 하지만, 저의 경우 이 문제 이후에는 주로 input 함수를 사용했습니다. 시간이 단축되긴 하지만 input 함수를 사용해도 시간 초과가 발생하지 않고 문제를 풀 수 있었기 때문입니다. 그런데 이번 문제는 input 함수를 사용하는 경우 시간 초과가 발생해서 문제를 풀 수가 없었습니다. 이 문제에서 제시한 대로 input 대신 sys.stdin.readline을 사용해야만 문제를 풀 수 있습니다.


11021_ A+B를 n만큼 반복해라


풀이:

test_case = int(input())
for x in range(1, test_case+1):
    A, B = map(int, input().split())
    print(f'Case #{x}: {A+B}')

11021_ A+B를 n만큼 반복해라 2


풀이:

test_case = int(input())
for x in range(1, test_case+1):
    A, B = map(int, input().split())
    C = A+B
    print(f'Case #{x}: {A} + {B} = {C}')

2438_별 찍기 ⭐


풀이:

N = int(input())
for i in range(1, N+1):
    print('*' * i)

2438_별 찍기 2(오른쪽 정렬) ⭐⭐


풀이:

N = int(input())
for i in range(1, N+1):
    print(" "* (N-i) + '*' * i)

10952_A+B를 0 0이 나올 때까지 반복해라


풀이:

while True:  #n값이 정해져있지 않기 때문에 while:True를 통해 계속 반복하게 됨.
    a, b = map(int,input().split())
    if(a == 0 and b ==0):
        break
    else:
        print(a+b)




📌필요지식
1) while문

  • while문의 기본 구조입니다.

  • while반복문은 [조건문]이 참(True)인 경우 수행부분을 진행하고, [조건문]이 거짓(False)인 경우 while문을 빠져나갑니다.
  • while반복문은 중첩해서 사용이 가능합니다.

2) while문의 break

  • while 반목문을 수행하다가 특정 조건을 만족하면 바로 while 반복문을 나오도록 하고 싶을때 사용하면됩니다.즉 break는 반복문 중간에 반복문을 탈출 하게 만들기 위해 사용합니다.

3) while문의 continue

  • while 반복문을 돌다가 특정 조건을 만족할때, 아래 코드는 무시하고 바로 반복문의 맨위로 올라가고 싶을때가 있을 수 있습니다.즉 중간에서 바로 맨 처음으로 올라가는 기능을 하는, 키워드 continue 입니다.

  • 만약에 특정조건을 만족하면 continue를 타게 되고, 바로 while [조건문]: 으로 올라가서 [조건문]이 True인지 False 인지 확인하고, True이면 다시 수행부분1~2 이렇게 수행하게 됩니다. [조건문]이 False이면 당연하게도 while 반복문을 나가게 됩니다.

10951_A+B를 조건 없이 반복해라


풀이:

while True:
    try:
        A, B = map(int, input().split())
    except:
        break
    print(A+B)




📌필요지식
1)try - except 구문 설명

  • 파이썬에서 구문 오류가 발생 할 때 해결할 수 있는 코드입니다. 프로그램 중에는 사용자가 무엇인가를 입력해야 하는 경우 에러가 발생할 가능성이 있습니다. 숫자를 입력해야 하는데 문자를 입력한다던가 실수를 입력해야 하는데 정수를 입력하는 등이 그런 예입니다. 백준 알고리즘 문제에서는 잘못 입력될 가능성이 없기 때문에 구문 오류에 대해 고려하지 않고 문제를 풀고 있지만 여러 가지 에러로 인해 프로그램이 실행되지 않을 수가 있습니다. 이러한 에러가 발생할 여지가 있는 경우에 try - except 구문을 이용하면 에러가 발생돼도 프로그램이 멈추지 않고 계속 진행될 수 있도록 만들 수 있습니다.

  • try - except 구문의 기본적인 구조는 try구문 쪽에 에러가 발생할 가능성이 있는 코드를 작성하고 except구문 쪽에 예외 발생 시 실행할 코드를 작성하는 겁니다. 이렇게 try - except구문으로 코드를 작성해두면 에러가 없을 때는 try구문을 실행하고서 except를 지나쳐서 그 다음 코드를 계속 진행해나가고 에러가 발생하면 except구문을 실행시킵니다.

  • try구문에서 input함수 등으로 무엇인가를 입력받는 코드를 작성하여 에러가 발생할 가능성이 생기는 경우에는 이번 문제에서 작성한 코드처럼 except구문에서 break를 이용해서 반복문을 빠져나갈 수도 있지만 print( )함수를 이용해서 어떤 문장이 출력되도록 코드를 작성해서 사용자로 하여금 정상적인 입력을 유도하면서 무한 반복을 유지시킬 수도 있습니다.

  • try-except 구문에는 추가적으로 else , finally 구문을 작성할 수도 있습니다. else 구문에는 에러가 발생하지 않았을 때 실행할 문장을 작성하고, finally 구문에서는 무조건 실행 할 코드를 작성합니다. try - except - else - finally 구문으로 작성하게 되면 보다 촘촘하게 에러에 대한 대비가 가능해집니다.

내용 정리
이번 문제는 두 수로 이루어진 여러 개의 테스트 케이스를 입력받으면 두 수의 합을 출력하는 문제입니다. 테스트 케이스의 숫자가 주어지지 않기 때문에 while 반복문을 이용해서 문제를 풀었고, 수가 입력되지 않아 에러가 발생하면 반복문을 끝낼 수 있도록 try - except구문을 활용해서 문제를 풀었습니다.


profile
타이밀크티는 맛있습니다.

0개의 댓글