본문 바로가기
백준 (코테)

3. [3단계] 제목: 반복문

by 코린이의 세계 2024. 8. 9.

https://easyjwork.tistory.com/10 < for문 활용법

1단계.
N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.
출력형식과 같게 N*1부터 N*9까지 출력한다

답: n = int(input())

for i in range(1,10):  # 1~9
    print(n, '*', i, '=', n*i)

반복문 하면 for 문이다. 파이썬에서는 for문을 range를 이용해서 단축해서 사용 가능하다. (문법이라 외워야 함) i가 1부터 10-1번 반복되는 for문이라고 생각하면 된다.


2단계.
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T가 주어진다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

답: t = int(input())  

for i in range(1, t+1):  # t 만큼 반복
    a,b = map(int,input().split())
    print(a+b)

t로 인 풋을 받고, 1부터 t+1-1 만큼 반복한다. (a / b를 한 줄에 각각 입력받고 더한 것을 출력함.


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

답: n = int(input())

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

print(sum)

먼저 sum을 정의. 이후 for문을 쓰고 for문 안에 sum = sum + i를 기입한다.


4단계.
영수증에 적힌, 구매한 각 물건의 가격과 개수구매한 물건들의 총 금액을 보고, 
구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자.
첫째 줄에는 영수증에 적힌 총 금액 X가 주어진다.

둘째 줄에는 영수증에 적힌 구매한 물건의 종류의 수 N이 주어진다.
이후 N개의 줄에는 각 물건의 가격 a와 개수 b가 공백을 사이에 두고 주어진다.

구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하면 
Yes를 출력한다. 일치하지 않는다면 No를 출력한다.

답: x = int(input())
n = int(input())
sum = 0
for i in range(n):
  price, cnt = map(int, input().split())
  sum += (price*cnt)

if (x == sum) :
  print("Yes")
else:
  print("No")

먼저 x , n을 입력받고 sum을 0으로 정의해 둔다. 이후 i가 0일 때부터 n-1만큼 반복된다. 그리고 가격과 개수를 입력받고 가격과 개수를 곱한 것을 sum에 합쳐준다. sum이 모든 총합이 되어야 하기에 이런 식으로 코드를 짰다. (이후 if문 작성)


5단계.
혜아는 책에 있는 정수 자료형과 관련된 내용을 기억해 냈다. 책에는 long int는 4바이트 정수까지 저장할 수 있는 정수 자료형이고 long long int는 8바이트 정수까지 저장할 수 있는 정수 자료형이라고 적혀 있었다. 혜아는 이런 생각이 들었다. “int 앞에 long을 하나씩 더 붙일 때마다 4바이트씩 저장할 수 있는 공간이 늘어나는 걸까? 분명 long long long int는 12바이트, long long long long int는 16바이트까지 저장할 수 있는 정수 자료형일 거야!” 그렇게 혜아는 당황하는 면접관의 얼굴을 뒤로한 채 칠판에 정수 자료형을 써 내려가기 시작했다.
혜아가 N바이트 정수까지 저장할 수 있다고 생각해서 칠판에 쓴 정수 자료형의 이름은 무엇일까?

답: for i in range(int(input())//4):
    print("long" , end=(" "))
    
print("int")

포인트는 long 하나에 4바이트씩 반복된다는 것. 예를 들어 20바이트라면 4 곱하기 5 > 즉 5번 반복이다. 이것을 반대로 말하면 입력받은 N을 4로 나눈 몫만큼 반복된다는 뜻이기도 하다. for문을 보면 기입받은 숫자를 4로 나눈 몫만큼 long를 반복하며 뒤에 end 함수로 공백을 주었다. 반복이 끝나면 이후 int를 출력한다.


6단계.
Python을 사용하고 있다면, input 대신 sys.stdin.readline 을 사용할 수 있다.
단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우
  .rstrip() 을 추가로 해 주는 것이 좋다.
첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

답: import sys
 
inp = int(input())
for i in range(inp):
        a,b = map(int, sys.stdin.readline().split())
        print(a+b)

이 파트는 "빠른 출력"에 대한 것이다. 보통 파이썬은 input으로 입력을 받지만, sys를 임포트하고 sys.stdin.readline를 사용해서 더 빠른 출력을 할 수 있다. 키포인트는 import sys이다. inp는 테스트 개수 T이다. (그냥 가볍게 풀고 넘어가자.)


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

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다.

답: x = int(input())
for i in range(1,x+1) :
    a, b = map(int, input().split())
    print("Case #" + str(i) + ":" , a+b)

여기서 포인트는 str(i)이다. 파이썬에서는 str함수로 문자열 변환이 가능하다.


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

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다.

답: T = int(input())

for i in range(1, T+1):
    a, b = map(int, input().split())
    print("Case #" + str(i) + ":", a, "+", b, "=", a+b)

위의 문제와 비슷한 문제이다.


9단계.
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
(별 찍기)

답: n = int(input())
for i in range(1,n+1):
    print("*" * i)

놀랍게도 파이썬은 문자열을 더하고 곱하기가 가능하다. 이 특성 덕분에 코드가 간결해진다. (다른 언어라면 이중 for문을 써야 함.)


10단계.
9단계의 별을 좌우 반전한 문제이다.

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

9단계와 로직은 같으나 a-i만큼 공백을 곱해주는 로직이 추가되었다. 예를 들어 a가 5라면? 처음엔 공백이 4개가 찍히고 이후 별이 하나 찍힐 것이다. 그다음 공백은 3개에 별이 2개.... 이런 식으로 반복


11단계.
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
입력의 마지막에는 0 두 개가 들어온다.

답: while (True) : 
    a,b = map(int,input().split())
    if a == 0 and b == 0 : 
        break
    else :
        print(a+b)

딱히 제한 조건이 없고 마지막에 0 0  두 개가 들어오면 테스트가 끝나니, while문 무한 루프를 돌리고 0 0 나올 때만 브레이크를 걸어주면 된다.


12단계.
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

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

똑같이 무한 루프를 돌지만, try / except으로 오류를 잡아줘야 한다. 이거 안 하면 런타임 오류가 뜬다. (혹은 컴파일 에러)

 

반복문은 프로그램의 꽃이다.

 

'백준 (코테)' 카테고리의 다른 글

1~4단계 백준 복습  (0) 2024.08.12
4. [4단계] 제목: 1차원 배열  (0) 2024.08.10
2. [2단계] 제목: 조건문  (0) 2024.08.08
1. [1단계] 제목: 입출력과 사칙연산  (0) 2024.08.07
0. 백준 방향성 잡기  (0) 2024.08.06