![[python] A, B = input().split()이 가능한 이유 (패킹,언패킹)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2gzYG%2FbtsMBWdbRrw%2FPLSa5nelQkjZ7YmsfJ2d10%2Fimg.png)
백준 문제를 풀다 보면 항상 이 코드를 쓰게 되는 것 같다.
A, B = input().split()
처음에는 별 생각 없이 쓰다가, 어느 순간 "이거 왜 이렇게 쓰는 거지?"라는 궁금증이 들었다.
그래서 해당 원리를 정리하고, 이 코드가 사용되는 이유를 설명해보려 한다.
가장 먼저 알아야 할 것은 패킹과 언패킹이다.
1. 패킹과 언패킹이란?
패킹(Packing)
여러 개의 값을 하나의 변수에 묶는 과정이다. 주로 리스트, 튜플 등의 자료구조를 활용하여 여러 데이터를 하나의 단위로 저장한다.
# 튜플 패킹
packed_tuple = 1, 2, 3
print(packed_tuple)
# 리스트 패킹
packed_list = [4, 5, 6]
print(packed_list)
언패킹(Unpacking)
패킹된 값을 개별 변수로 분리하는 과정이다. 여러 개의 변수를 한 번에 할당하는 방식으로 이루어진다.
# 튜플 언패킹
x, y, z = packed_tuple
print(x, y, z) # 1 2 3
# 리스트 언패킹
a, b, c = packed_list
print(a, b, c) # 4 5 6
📌 주의: 언패킹을 할 때 변수의 개수와 값의 개수가 맞아야 한다. 그렇지 않으면 오류가 발생한다.
x, y = packed_tuple
만약 개수가 다를 경우, *를 사용하여 일부 값을 리스트로 묶을 수도 있다.
first, *middle, last = [1, 2, 3, 4, 5]
print(first)
print(middle)
print(last)
이제 A, B = input().split()에서 패킹과 언패킹이 어떻게 적용되는지 보자.
2. A, B = input().split()이 가능한 이유
- input()을 사용하면 문자열을 입력받음사용자가 10 20을 입력하면 text에는 "10 20"이라는 하나의 문자열이 저장된다.
- text = input() # 예: "10 20"
- .split()으로 공백을 기준으로 나누기split()은 문자열을 공백 기준으로 나눠 리스트를 반환한다.
- values = text.split() # ['10', '20']
- 리스트 언패킹을 활용하여 변수에 저장리스트 ['10', '20']의 두 요소를 A와 B에 각각 저장하는 과정이다. 즉, 리스트의 언패킹이 일어나는 것!
- A, B = values # A = '10', B = '20'
3. 왜 리스트로 안 받고 바로 언패킹할까?
A, B = input().split()
위 코드를 다음처럼 바꿀 수도 있다.
values = input().split()
A = values[0]
B = values[1]
하지만 이렇게 하면 코드가 길어지고 가독성이 떨어진다. A, B = input().split()처럼 한 줄로 처리하면 간결하고 직관적이다.
또한, 백준 같은 온라인 저지에서는 빠르게 입력을 처리하는 것이 중요하기 때문에 간결한 코드가 선호된다.
4. 응용: 숫자로 변환하기
input().split()은 문자열을 반환하므로, 숫자로 변환하려면 map(int, ...)을 활용하면 된다.
A, B = map(int, input().split())
이렇게 하면 A와 B가 정수형(int)으로 변환되어 저장된다. (문자열로 처리하면 사칙연산이 불가능하기 때문에 대부분 숫자로 변환해서 사용한다.)
5. 결론
백준 문제 풀 때 자주 쓰는 A, B = input().split() 코드는 리스트 언패킹을 활용하여 입력을 간결하게 처리하는 방법이다. 이렇게 쓰면 코드가 짧아지고 가독성이 좋아지므로 자연스럽게 많이 사용된다.
앞으로 A, B = input().split()을 볼 때, 그냥 쓰는 것이 아니라 "아, 이게 리스트 언패킹이구나!"라고 생각하면 이해가 더 쉬워질 것이다!
'Coding > Python' 카테고리의 다른 글
[백준 33675번] L-트로미노 타일링 (python) (0) | 2025.04.16 |
---|---|
[백준 33674] 하늘에서 떨어지는 N개의 별, 파이썬 (0) | 2025.04.04 |
[백준] 32953번 - 회상, python (0) | 2025.03.24 |
[알고리즘] 파이썬 알고리즘 주의 사항 (0) | 2022.08.13 |
[파이썬] 리스트 원소 랜덤 출력하는 법 (0) | 2022.05.11 |
[백준 -파이썬] 10171번 고양이 출력하시오 (\\를 조심하자) (0) | 2022.04.15 |
공부하고 정리하는 기록모음