파이썬 split과 map 정리 | 코딩테스트 입력 처리에서 자주 쓰는 이유

코딩테스트에서 split()이랑 map()은 거의 기본이다.

처음엔 둘 다 따로 보면 애매한데,

실제로는 입력 문자열을 쪼개고 → 원하는 자료형으로 바꾸는 패턴으로 계속 같이 나온다.

특히 아래 한 줄은 코테에서 진짜 많이 쓴다.

nums = list(map(int, input().split()))

이걸 그냥 외우는 것도 방법이긴 한데,

왜 이렇게 쓰는지 이해해두면 나중에 변형 문제에서도 덜 꼬인다.

이번 글은 split()과 map()을입력 처리 관점에서 정리해보려고 한다.


🔗 주제

파이썬 split / map 정리

+ 마지막에 연습문제 첨부합니다 필요하면 사용하시면 되어요


개념 요약

둘 역할은 딱 나뉜다.

  • split() → 문자열을 나눈다
  • map() → 나눠진 각 요소에 같은 변환을 적용한다

즉 이 흐름이다.

  1. 입력은 보통 문자열로 들어온다
  2. split()으로 필요한 기준으로 자른다
  3. map()으로 int, float 같은 형변환을 건다
  4. 필요하면 list()로 감싸서 바로 쓴다

코테에서 입력 처리할 때는

이걸 거의 패턴처럼 쓴다고 보면 된다.


✅ 자주 쓰는 형태

1) 공백으로 구분된 숫자 여러 개 입력받기

nums = list(map(int, input().split()))

예를 들어 입력이

1 2 3 4 5

이렇게 들어오면 결과는

[1, 2, 3, 4, 5]

가 된다.


2) 변수 여러 개에 바로 받기

n, m, k = map(int, input().split())

입력이

3 4 5

이면

  • n = 3
  • m = 4
  • k = 5

로 바로 들어간다.

이건 그래프 문제나 격자 문제에서 엄청 자주 쓴다.


3) 문자열을 공백 기준으로 나누기

words = input().split()

입력이

apple banana kiwi

이면 결과는

['apple', 'banana', 'kiwi']

가 된다.

이건 굳이 숫자 변환이 필요 없을 때 쓴다.


4) split한 뒤 바로 가공하기

squares = [x * x for x in map(int, input().split())]

이렇게 하면 입력받고, 숫자로 바꾸고, 제곱까지 한 번에 간다.

코테에서는

입력 처리 + 간단한 전처리를 한 줄에 붙여 쓰는 경우가 꽤 많다.


정답처럼 외워두면 편한 패턴

코테에서 자주 나오는 건 결국 이 정도다.

# 숫자 여러 개를 리스트로 받기
nums = list(map(int, input().split()))

# 숫자 여러 개를 변수로 바로 받기
a, b, c = map(int, input().split())

# 문자열 여러 개를 리스트로 받기
words = input().split()

# 한 줄 숫자를 바로 가공하기
nums = [x * 2 for x in map(int, input().split())]

이 정도만 익숙해져도 입력 처리에서 손이 많이 빨라진다.


생각해야 하는 부분

이 글에서 중요한 건

split()이랑 map()을 따로 외우지 말고,입력 처리 흐름으로 묶어서 보는 것이다.


1. split()은 문자열을 자르는 역할이다

input()으로 받는 값은 기본적으로 문자열이다.

예를 들어

s = input()

입력이 1 2 3이어도 이 상태에선 그냥 "1 2 3"이라는 문자열 하나다.

여기서 split()을 쓰면 공백 기준으로 잘린다.

"1 2 3".split()

결과는

['1', '2', '3']

즉, split()은 문자열을 쪼개는 역할이다.

여기까지는 아직 숫자가 아니다.


2. map()은 각 요소에 같은 작업을 적용하는 역할이다

쪼개진 결과가 문자열 리스트면,

그다음엔 숫자로 바꿔야 한다.

map(int, ['1', '2', '3'])

이건 각 문자열에 int()를 적용하는 뜻이다.

즉,

  • '1' → 1
  • '2' → 2
  • '3' → 3

이렇게 바뀐다.

그래서 split() 다음에 map(int, ...)이 자주 붙는다.


3. list()는 “결과를 바로 쓰기 좋게” 만드는 역할이다

map() 결과는 바로 리스트가 아니다.

그래서 보통 이렇게 감싼다.

list(map(int, input().split()))

이렇게 하면 바로

[1, 2, 3]

형태로 쓸 수 있다.

다만 변수 여러 개에 바로 받을 땐 list() 없어도 된다.

a, b = map(int, input().split())

이건 a, b가 직접 받아가기 때문에 괜찮다.


예외처리 / 주의할 점

⚠️ 1. split만 하면 아직 문자열이다

이건 처음에 제일 많이 헷갈린다.

nums = input().split()
print(nums)

입력이 1 2 3이면 결과는

['1', '2', '3']

이다.

숫자처럼 보여도 실제로는 문자열이라서

바로 계산하려 하면 꼬인다.

예를 들어 이런 식은 안 된다.

nums = input().split()
print(nums[0] + nums[1])

입력이 1 2면 결과는 3이 아니라 "12"가 된다.

즉, 숫자 계산하려면 반드시 형변환이 필요하다.


⚠️ 2. map 결과를 바로 출력하면 기대한 모양이 아닐 수 있다

nums = map(int, input().split())
print(nums)

이렇게 하면 리스트처럼 안 보일 수 있다.

그래서 보통은

nums = list(map(int, input().split()))
print(nums)

이렇게 많이 쓴다.

다만 언패킹할 때는 굳이 리스트로 안 감싸도 된다.


⚠️ 3. 공백 기준 말고 다른 구분자도 가능하다

이건 나중에 종종 나온다.

예를 들어 쉼표로 구분된 문자열이면 이렇게 간다.

s = "1,2,3,4"
nums = list(map(int, s.split(',')))
print(nums)

즉, split()은 공백만 되는 게 아니라기준 문자열을 직접 줄 수도 있다는 점도 같이 알아두면 좋다.


내 시행착오

이 부분은 나도 꽤 오래 걸렸다.


1. split과 map을 따로 외우려고 했다

처음엔

  • split()은 뭐더라
  • map()은 뭐더라

이렇게 각각 따로 보니까 잘 안 남았다.

근데 코테에서는 둘이 거의 같이 나온다.

list(map(int, input().split()))

이걸 하나의 입력 처리 패턴으로 보는 게 훨씬 낫다.


2. split하면 바로 숫자인 줄 알았다

이건 진짜 많이 헷갈린다.

입력이 숫자로 보여도

input()으로 받는 순간 문자열이다.

그리고 split()도 문자열을 나누는 거라

결과도 여전히 문자열 리스트다.

즉, split()만으로는 숫자가 안 된다.


3. map 결과를 바로 리스트처럼 쓰려 했다

처음엔 map() 결과가 그냥 리스트인 줄 알고 썼는데,

막상 출력해보면 기대한 모양이 안 나와서 헷갈렸다.

결국 이건 상황 따라 정리하면 된다.

  • 리스트로 바로 써야 한다 → list(map(...))
  • 변수 여러 개에 바로 받는다 → a, b = map(...)

이렇게.


4. 입력 처리도 결국 패턴이라는 걸 늦게 느꼈다

처음엔 문제마다 입력이 다 다르게 느껴졌는데,

계속 보다 보니까 자주 쓰는 형태가 정해져 있었다.

  • list(map(int, input().split()))
  • a, b, c = map(int, input().split())
  • input().split()

결국 이 정도 패턴이 계속 반복된다.

그래서 이건 문법 암기보다는

패턴 익숙해지기 쪽이 더 중요했다.


한 줄 정리

split()은 문자열을 자르고, map()은 잘린 요소를 변환한다.

코테에서는 이 둘을 따로 보지 말고 입력 처리 패턴으로 묶어서 익히는 게 제일 낫다.

 

LC,map,split_연습.pdf
0.31MB