본문으로 건너뛰기

백준 3단계 - 반복문

for, while 등의 반복문을 사용해 봅시다.

2739 구구단

N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.

n = int(input())

print('--- output ---')
for i in range(9):
print(f"{n} * {i + 1} = {n * (i + 1)}")

10950 A+B - 3

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

t = int(input())
result = []
for i in range(t):
result.append(sum(list(map(int, input().split()))))

print('--- output ---')
print(*result, sep='\n')

8393

n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.

n = int(input())

print('--- output ---')
print(sum([i for i in range(1, n+1)]))

25304 영수증

준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다.
영수증에 적힌,

  • 구매한 각 물건의 가격과 개수
  • 구매한 물건들의 총 금액

을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자.

x = int(input())
n = int(input())
total_sum = 0
for i in range(n):
a, b = map(int, input().split())
total_sum += a * b

print('--- output ---')
if x == total_sum:
print("Yes")
else:
print("No")

15552 빠른 A+B

본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.
C++을 사용하고 있고 cin/cout을 사용하고자 한다면, cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용해 주고, endl 대신 개행문자(\n)를 쓰자. 단, 이렇게 하면 더 이상 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다.
Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.
Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.
또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다. 테스트케이스를 하나 받은 뒤 하나 출력해도 된다.
자세한 설명 및 다른 언어의 경우는 이 글에 설명되어 있다.
이 블로그 글에서 BOJ의 기타 여러 가지 팁을 볼 수 있다.

import sys
input = sys.stdin.readline

t = int(input())
sums = []
for i in range(t):
a, b = map(int, input().split())
sums.append(a + b)

print('--- output ---')
print(*sums, sep='\n')

11021 A+B - 7

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

t = int(input())
sums = []
for i in range(t):
a, b = map(int, input().split())
sums.append(a + b)

print('--- output ---')
for i, x in enumerate(sums):
print(f"Case #{i + 1}: {x}")

11022 A+B - 8

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

t = int(input())
sums = []
for i in range(t):
a, b = map(int, input().split())
sums.append([i + 1, a, b, a + b])

print('--- output ---')
for x in sums:
print(f"Case #{x[0]}: {x[1]} + {x[2]} = {x[3]}")

2438 별 찍기 - 1

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

n = int(input())
print('--- output ---')
for i in range(n):
print('*' * (i+1))

2439 별 찍기 - 2

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

n = int(input())
print('--- output ---')
for i in range(n):
print(' ' * (n - i - 1) + '*' * (i+1))

10871 X보다 작은 수

정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.

n, x = map(int, input().split())
nums = list(map(int, input().split()))
selected = [str(num) for num in nums if num < x]

print('--- output ---')
print(*selected)

10952 A+B - 5

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

result = []
while True:
a, b = map(int, input().split())
if a == 0 and b == 0:
break
result.append(a + b)

print('--- output ---')
print(*result, sep='\n')

10951 A+B - 4

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

result = []
while True:
try:
a, b = map(int, input().split())
except:
break
result.append(a + b)

print('--- output ---')
print(*result, sep='\n')

1110 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

n = int(input())

turn = 0
new = n
while True:
turn += 1
num1 = new // 10
num2 = new % 10
sum_num12 = num1 + num2
new = num2 * 10 + sum_num12 % 10
if n == new:
break

print('--- output ---')
print(turn)