코딩테스트/백준 문제

[파이썬] 백준 10093번 : 숫자

김뚱입니다 2025. 4. 20. 05:40

[문제]

문제 : 백준 10093번 : 숫자

풀이 방법 : min max

서브태스크...? 이건 뭔가 싶었는데 제출하고 나서 내 코드에 저 배점으로 점수가 정해져서 나왔음

min max 사용법 이런 설명은 코드 부분에 작성했으니 참고

 

 

 

[구현]

▶ 의사코드 [입력]

  1. 입력에서 한 줄을 읽어 공백으로 구분된 두 정수 A, B를 가져온다.

 

▶ 의사코드 [로직]

  1. low는 더 작은 수, high는 더 큰 수
  2. n = high - low - 1
    • 만약 이 값이 음수라면? n = 0
  3. result는 low + 1부터 high - 1까지 모든 정수를 순서대로 모은다.

 

▶ 의사코드 [출력]

  1. 첫째 줄에 n을 출력한다.
  2. 만약 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 만나서 신나서 작성해 봄

초보는 브론즈 문제만 풀어도 신이 난다!

행복의 가성비