본문 바로가기
Coding Test/백준 단계별로 풀어보기

백준 단계별로 풀어보기 - 2739번, 25304번, 11021번, 11022번, 2439번, 10871번, 10951번, 10952번, 1110번

by JUNG씨 2022. 9. 5.

📍2739번 구구단 문제를 풀면서 1부터 9까지의 반복문을 돌리는 방법을 찾다가 range함수를 알게되었다.

🌀range 함수 : 특정 구간의 숫자의 범위를 만들어주는 함수. 특정 횟수 만큼 반복하는 반복문 만들기에 유용!

1) range(A) => 0부터 A-1까지의 정수 범위를 반환

2) range(A, B) => A부터 B-1까지의 정수 범위를 반환

3) range(A, B, C) => A부터 B-1까지의 정수 범위를 C 숫자만큼의 간격으로 반환

🌀range(1,10) 함수를 사용해서 1부터 9까지 반복문을 돌릴수 있다.

N = int(input())

for i in range(1,10):
    print(N, '*', i, '=', N*i)

 

📍25304번 영수증

X = int(input())
N = int(input())
total = 0

for i in range(N):
    a, b = map(int, input().split())
    total += a*b

if X == total:
    print('Yes')
else:
    print('No')

 

📍11021번, 11022번 F-String 으로 출력하기

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

print(f'Case #{i}: {A+B}')

print(f'Case #{i}: {A} + {B} = {A+B}')

 

📍2439번 별 찍기-2

N = int(input())

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

=> 각 라인마다 별표 앞에 공백을 N-i만큼 출력해주면 되기 때문에 ("  " )* (N-i) 로 공백을 표현했다.

 

📍10871번 X보다 작은 수

N, X = map(int, input().split())

A = list(map(int, input().split()))
for i in range(N):
    if A[i] < X:
        print(A[i], end=" ")

=> 둘째 줄에 수열 A를 이루는 정수 N개를 입력받아야 하기 때문에 입력받은 숫자들을 배열로 넣어준다. 그리고 출력된 숫자들 사이에 간격을 주기 위해서 end=" "를 함께 print해준다.

 

📍10952번 A+B -5

while True:
    A, B = map(int, input().split())
    if (A==0 and B==0) :
        break
    else:
        print(A+B)

=> 앞에 문제들에서는 for문에서 몇번 반복할지 범위를 주는 변수를 입력받았었는데 이 문제에서는 입력값이 0 0 일때까지 계속 테스트케이스를 출력하는 문제이기 때문에 for문이 아니라 while문을 사용해야한다! 그래서 while문에 대해 정리해보았다.

⭐️while 반복문:  조건식이 참(True)일 때 반복하고 거짓(False)일 때 반복을 끝냅니다.⭐️

 

🌀while 반복문: 반복 횟수가 정해져 있지 않을 때 주로 사용!

🌀for 반복문: 반복 횟수가 정해져 있을 때 자주 사용!

🌀while True : or while 1: => while에 조건문 대신 True 혹은 1을 지정하면 무한하게 반복하는 무한루프 생성. 조건식이 항상 참이기 때문에 다른 조건은 필요없다.

🌀break : break조건을 만들어 반복문이 끝나는 시점을 정해준다! 이 문제에서는 0 0이 입력되면 종료되는 것으로 설정해야 하니까 이 조건을 만족할 때 break 하라고 지정하면 될 것이다.

 

📍10951번 A+B-4

위 문제랑 같은 문제이지만 실행을 멈추는 조건이 제시되어 있지 않다. 즉, 변수 A,B에 입력이 없으면 에러가 나는 것이다.                        그래서 try-except구문을 사용해야한다!!! try구문에는 에러가 날 가능성이 있는 문장을 작성하고, except구문에는 에러가 발생한다면 실행할 문장을 작성한다.

 

📍1110번 더하기 사이클

input_num = int(input())

num = input_num #num변수에 input_num을 지정
count = 0 #사이클 횟수
while True:
    sum_num = (num // 10) + (num % 10) #각 자릿수를 더한 수
    new_num = ((num % 10) * 10) + (sum_num % 10) #새로 만들어지는 수
    count += 1 #사이클 카운트
    if new_num == input_num:
        break
    num = new_num #조건 만족하지 않으면 새로 만들어진 숫자를 다시 num에 넣고 또 반복

print(count)

입력받는 숫자를 num이라는 변수에 집어넣는다. count는 사이클의 횟수를 가리키는 변수이다.

변수 sum_num 은 각 자리의 숫자를 더한 수를 나타낸다.

변수 new_num은 num의 일의 자리숫자와 sum_num의 일의자리 숫자를 합친 결과를 나타낸다.

🌀num // 10 을 하면 십의 자리 숫자를 표현할 수 있고, num % 10 을 하면 일의 자리 숫자를 표현할 수 있다. 🌀

sum_num = (num // 10) + (num % 10)
new_num = ((num % 10) * 10) + (sum_num % 10)

(ps.위 코드는 생각하지도 못한 방법이다.... 대체 저걸 어떻게 표현하지 한참 고민했던 거 같다. 결국 구글링 했지만....🫠)