본문 바로가기

programming/algorithm

[ algorithm ] 백준 단계별 문제 풀이 (반복문 2탄)

[ algorithm ] 백준 단계별 문제 풀이 (반복문 2탄)

 

안녕하세요. 심심한 코딩쟁이입니다.

 

오늘은 백준에서 반복문에 관련된 문제들의 풀이를 살펴보려 합니다.

 

파이썬3 를 사용해 문제 풀이를 진행하겠습니다.

 

문제마다 링크를 걸어두었으니 문제를 살펴보시고 문제를 푼 다음에 저와

 

풀이를 비교해 보시는 걸 추천드립니다.


차근차근 풀어봅시다.

 

Algorithm
알고리즘



백준 BAEKJOON 11022

 

https://www.acmicpc.net/problem/11022

 

 

11022번: A+B - 8

각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다.

www.acmicpc.net

 

문제 해석

 

테스트 케이스 마다 번호와 덧셈 식을 앞에 붙여주고 결과값까지 출력하는 문제

 

풀이

 

import sys

n = int(sys.stdin.readline())

for i in range(1, n+1):
    a, b = map(int, sys.stdin.readline().rstrip().split())
    print(f"Case #{i}: {a} + {b} = {a+b}")

 

풀이 해석 및 팁

 

sys.stdin.readline을 사용해 빠르게 입력을 받고 문자열 포멧팅을 사용해 쉽게 원하는 출력값을 출력합니다.

백준 BAEKJOON 2438

 

https://www.acmicpc.net/problem/2438

 

 

2438번: 별 찍기 - 1

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

www.acmicpc.net

 

문제 해석

 

주어지는 숫자줄만큼 별을 출력하는데 줄의 번호만큼 별을 출력해야하는 문제

 

풀이

 

import sys

n = int(sys.stdin.readline())

for i in range(1,n+1):
    print('*'*i)

 

풀이 해석 및 팁

 

입력받은 숫자만큼 for 문을 반복하면서 *에 i를 곱해서 출력합니다.
문자열에 수를 곱하면 문자열이 곱해진 수만큼 뒤에 이어붙습니다.

백준 BAEKJOON 2439

 

https://www.acmicpc.net/problem/2439

 

 

2439번: 별 찍기 - 2

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

www.acmicpc.net

 

문제 해석

 

오른쪽으로 정렬된 별을 출력하는 문제
입력 받은 수 만큼 각 줄에 별 개수를 늘려가며 출력해야한다.

 

풀이

 

import sys

n = int(sys.stdin.readline())

for i in range(1, n+1):
    print(" "*(n-i)+"*"*i)

 

풀이 해석 및 팁

 

문자열의 곱셈을 활용해 문제를 해결했습니다.
오른쪽 정렬을 위해서 필요한 공백의 수를 곱해주고 그 외 나머지 칸의 수만큼 *에 곱해서 출력합니다.

백준 BAEKJOON 10952

 

https://www.acmicpc.net/problem/10952

 

 

10952번: A+B - 5

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

문제 해석

 

테스트 케이스의 개수가 주어지지 않고 0 두개가 들어오면 마지막 입력이라는 조건이 있는 문제이며

두 수의 합을 출력해주면 됩니다.

 

풀이

 

import sys

a, b = map(int, sys.stdin.readline().split())
while a != 0 and b != 0:
    print(a+b)
    a, b = map(int, sys.stdin.readline().split())

 

풀이 해석 및 팁

 

먼저 while문 밖에서 두 수를 입력받고 두 수가 모두 0이 아닐때까지 반복하도록 while문에 조건을 달아둡니다.
입력받은 두 수의 합을 출력하고 다시 두 수를 입력받는것으로 반복문의 내용은 끝입니다.
반복분의 조건이 참이면 합을 출력하고 두 수를 입력 받는 것이 반복됩니다.

백준 BAEKJOON 10951

 

https://www.acmicpc.net/problem/10951

 

 

10951번: A+B - 4

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

문제 해석

 

몇개의 테스트 케이스가 주어지는지 알수없는 상황에서 두 수의 합을 출력하는 문제

 

풀이

 

import sys

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

 

풀이 해석 및 팁

 

try except 문을 사용해 sys.stdin.readline이 받아올 것이 없는 경우에 while 반복문을 중지하는 방법으로
테스트 케이스의 개수가 주어지지 않은 문제를 해결합니다.

백준 BAEKJOON 1110

 

https://www.acmicpc.net/problem/1110

 

 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net

 

문제 해석

 

문제에서 주어진 조건을 통해 새로운 수가 생성되는데 몇번의 과정을 거쳐서 원래 수로 돌아가는지 찾는 문제

 

풀이

 

import sys

n = int(sys.stdin.readline())
count = 0
c = n
while True:
    count += 1
    a = c // 10
    b = c % 10
    c = b*10 + (a+b)%10
    if n == c:
        break
print(count)

 

풀이 해석 및 팁

 

변수 c에는 계속해서 변하는 두자리 수를 대입시켜줍니다.
변수 a에는 c의 십의자리 수, 변수 b에는 c의 일의자리 수를 대입합니다.
문제에서 주어진 조건으로 새로운 수를 생성해 c에 대입합니다.
이때 n과 c가 같다면 while문을 멈추고 몇번의 과정을 거쳤는지 출력하면 완료입니다.

여기까지 백준 단계별 문제 반복문에 대한 문제 풀이였습니다.

 

저번시간에도 반복문 관련 문제를 살펴보았는데 오늘의 반복문 문제는 난이도가 오른것 같습니다.

 

반복문 문제 1탄을 보지 못하셨다면 아래 링크를 통해 확인해주시기바랍니다.

 

[ algorithm ] 백준 단계별 문제 풀이 (반복문 1탄)

 

문제를 풀면서 어려운 점이나 궁금하신것이 있다면 댓글로 남겨주세요. 성심성의껏 답변드리겠습니다.

 

감사합니다.

반응형