코딩테스트/백준 문제
[파이썬] 백준 10093번 : 숫자
김뚱입니다
2025. 4. 20. 05:40
[문제]
문제 : 백준 10093번 : 숫자
풀이 방법 : min max
서브태스크...? 이건 뭔가 싶었는데 제출하고 나서 내 코드에 저 배점으로 점수가 정해져서 나왔음
min max 사용법 이런 설명은 코드 부분에 작성했으니 참고
[구현]
▶ 의사코드 [입력]
- 입력에서 한 줄을 읽어 공백으로 구분된 두 정수 A, B를 가져온다.
▶ 의사코드 [로직]
- low는 더 작은 수, high는 더 큰 수
- n = high - low - 1
- 만약 이 값이 음수라면? n = 0
- result는 low + 1부터 high - 1까지 모든 정수를 순서대로 모은다.
▶ 의사코드 [출력]
- 첫째 줄에 n을 출력한다.
- 만약 n > 0 이라면, 둘째 줄에 result의 모든 원소를 공백으로 구분해 출력한다.
[코드]
1. 정수 A, B 입력받기
A, B = map(int, input().split())
- input().split()
- "8 14\n" 을 ["8","14"] 리스트로 분리
- map(int, …)
- 각 문자열을 정수로 변환
- A, B = …
- 두 정수를 A, B 변수에 각각 저장
2. 작은 값(min)과 큰 값(max) 선정
low, high = min(A, B), max(A, B)
- min(A,B)
- 더 작은 값을 low에
- max(A,B)
- 더 큰 값을 high에
- 이후의 계산을 항상 low→high 구간으로 통일할 수 있어서 편리함
3. 사이에 들어가는 정수 개수(n) 계산
n = max(0, high - low - 1)
- 원래 계산
- high - low - 1 이면 사이 개수
- ex) 14 – 8 – 1 = 5
- 예외 처리
- 같을 때 음수가 되지 않도록 max(0, …)
- A=B면 high - low - 1 = -1 → max(0, -1) = 0
4. 숫자 리스트(result) 생성
result = list(range(low + 1, high))
- range(start, end)
- start부터 end-1까지 순서대로 생성
- ex) range(9, 14) → 9,10,11,12,13
- list(...)
- 그 iterator를 [9,10,11,12,13] 리스트로 변환
5. 두 정수 사이 개수 출력
print(n)
6. 두 정수 사이 숫자들 출력 (존재할 때만)
if n > 0:
print(*result)
- if n > 0:
- 사이에 숫자가 하나라도 있을 때만 실행
- print(*result)
- 리스트를 print(x, y, z, …) 형태로 언패킹하여 공백으로 구분해 출력
- 이거 진짜 유용함
▶ 전체코드
import sys
input = sys.stdin.readline
A, B = map(int, input().split())
low, high = min(A, B), max(A, B)
# 두 수 사이의 정수 개수
n = max(0, high - low - 1)
# 출력용 리스트 : low+1 부터 high-1 까지
result = list(range(low + 1, high))
print(n)
if n > 0:
print(*result)
[제출 결과]
처음에는 뻘짓해서 틀림 ㅎㅎ;
[회고]
오랜만에 min max 만나서 신나서 작성해 봄
초보는 브론즈 문제만 풀어도 신이 난다!
행복의 가성비