-
2.(2) 코테용 데이터 입력 스킬 (input().split(), map() 등)카테고리 없음 2021. 10. 22. 11:50
1. input()
str = input() num = int(input())
기본적인 입력 방법으로, input()자체는 문자열을 입력받는 것으로 처리됩니다.
그렇기 때문에 int(input())을 해주어야 숫자형 입력이 가능해집니다.- num변수에 저장된 숫자, 예를 들어 1993이란 숫자를 각각 하나씩 쪼개고 싶을 땐,
num = list(str(num)) print(num)
2. input().split()
split() 내장함수는 문자열을 특정 구분자로 나누고 싶을 때 사용합니다.
가령 split(',')은 쉼표로 구분된 문자열을 나눌 때 사용하면 됩니다다.
split()은 공백으로 되어있으니 띄어쓰기를 구분할 때 사용됩니다.str이라는 변수에 여러 입력값을 저장합니다.
str = input().split() >>> ['you','are','welcome']
예를들어, 'you are welcome'이란 문자열에 .split()을 적용하면 위와 같이 출력됩니다.
당연한 소리지만 str[0]은 'you'가 됩니다.3. map()
위의 input().split()은 하나의 변수에 리스트의 형태로 저장됩니다.
여러 변수를 생성하여 각각의 값을 할당하고 싶을 땐 map()함수를 이용합니다.주의할 점은 map()함수는 최소한 2개의 인자를 괄호안에 써주어야하는데,
map(int, input().split()) # 숫자형을 입력받겠다. map(str, input().split()) # 문자형을 입력받겠다.
위와 같은 형식으로 작성해야 합니다. 그렇지 않으면 에러납니다.
a, b, c = map(input().split() print(a,b,c) >>> 1, 2, 3
4. sys.stdin.readline()
대량의 데이터를 반복적으로 입력받아야 할 때, input()대신 sys.stdin.readline()을 이용하면 성능(속도)이 향상됩니다. 주로 백준 알고리즘 문제를 풀 때 유용합니다.자바에서 Scanner보다 BufferedReader가 빠른것과 같은 맥락입니다.
- import sys 를 먼저 선언해주어야 합니다.
import sys read = sys.stdin.readline() print(read)
하나의 변수(read)에 str형태로 저장합니다.
import sys read2 = sys.stdin.readline().split() print(read2)
하나의 변수(read2)에 list형태로 저장합니다.
- 각각의 리스트 원소를 저장하고 싶을 땐, map()함수를 사용합니다.
import sys year, month, date = map(int, sys.stdin.readline().split()) print(year, month, date)
5. 배열
백준 문제를 풀 때 배열을 입력해야하는 상황이 많습니다.
- 1차원 배열
a = [0 for _ in range(5)] print(a)
리스트 내에서 for문을 5번 반복시켜 0을 5번 만들어 1차원 배열을 만듭니다.
- 2차원 배열
m, n = 5,4 a = [[0]*m for _ in range(n)] print(a)
위와 같은 원리입니다.
리스트 내에서 [0] * m 에 대해서 for문을 n번 반복합니다.
여기선 for문의 반복횟수가 행(row)이 되고 m이 column의 수가 되어, n x m 형태의 2차원 배열이 만들어집니다.6. for문을 이용한 N번 입력
answer = [int(input()) for _ in range(N)]
N은 사용자가 임의로 지정할 수 있습니다.
N이 5이면, 원소가 다섯개인 리스트를 생성할 수 있습니다.