알고리즘 강의를 하다보면 생각보다 많은 학생들이 입력에서 막혀서 시간을 허비하는 것을 봤다.
이번 기회에 정리해 놓으면 한 분이라도 도움이 될것 같아서 정리해보도록 하겠다!! ^-^
코딩테스트에서는 대게 input파일이 주어진다.
문제를 풀때 입력을 줘야하는데 가장 간단한 방법은 input 텍스트를 복사해서 프로그램을 실행하고 콘솔창에 붙여넣기 해주는 것이다.
하지만 이 방법은 디버깅시에 귀찮기도 하고, 가끔 발생하는 pycharm 콘솔창 오류를 만나면 난감하다.
이 때, input 파일을 텍스트 파일로 저장하고 바로 읽어서 실행할 수 있도록 설정하면 편하다.
파일로 입력받기
- sys 모듈 임포트
- 표준 입력을 파일/읽기로 설정
import sys
#표준입력을 파일로 설정
sys.stdin = open("input.txt","r")
한줄을 읽어서 정수로 변환
- input() : 한줄을 읽어옴
- int() : 정수로 변환
N = int(input())
print(N)
한줄을 읽고 공백으로 구분된 문자를 입력받기
- input().split(구분문자) : 한줄을 읽고 구분문자로 나눠서 문자로 이뤄진 리스트로 입력받음
print(input().split())
# a b c # 콘솔창에 입력하면
['a', 'b', 'c'] #문자로 입력됨
한줄을 읽고 공백으로 구분된 문자를 정수로 변환
- map(형식,리스트) : 리스트에 있는 데이터를 형식에 맞춰 변환함
N,M = map(int,input().split())
# 1 2 #입력
print(N,M)
# 1 2 #출력
이 경우 위와 같이 리스트에 있는 요소의 갯수에 맞춰서 변수의 개수(N,M 두개면 입력도 2개)를 해줘야 함.
변수는 2개를 설정하고 입력을 3개를 주면 아래와 같은 오류가 뜸.
그래서 이 명령은 내가 입력받을 데이터의 갯수를 명확히 알때 사용해야한다.
N,M = map(int,input().split())
1 2 3 #입력
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
1차원 배열(리스트) 입력받기
그러면 입력데이터가 여러개이거나 몇개인지 미리 알수 없는경우에는 어떻게 할까?
- map(int,input().split()) : 한줄 입력받아 공백으로 나눈 문자열 리스트를 int형으로 변환
- list() : 괄호안의 데이터를 리스트로 묶음
arr = list(map(int,input().split()))
>>> 1 2 3 4 5 #입력
print(arr)
[1, 2, 3, 4, 5] #숫자형 리스트로 입력을 받아 arr변수에 저장됨
이어진 숫자를 한자리씩 나눠서 리스트에 저장 : 문자열 리스트로 저장
input() : 한줄을 읽어옴 (구분문자가 없다/ 문자열로 읽어옴)
print(input()) #한줄을 입력받아 그대로 출력
>>> 12345 #입력
12345 #하나의 문자열로 출력됨
arr = list(input()) #한줄을 입력받아서 list함수로 감싸면?
>>> 12345 #입력
print(arr)
['1', '2', '3', '4', '5'] #문자 하나씩을 리스트로 변환함
이어진 숫자를 한자리씩 나눠서 리스트에 저장 : 숫자형 리스트로 저장
map() 함수를 이용해서 문자열을 숫자로 변환한 후 list() 함수를 이용해서 리스트로 변환해준다.
arr = list(map(int,input())) #map을 이용해서 문자열을 -> 숫자로
>>> 12345 #입력
print(arr)
[1, 2, 3, 4, 5] #숫자형리스트로 입력됨
N행으로 이뤄진 2차원 배열 입력받기
- 리스트 내포 : 리스트를 생성할때 반복문을 사용할 수 있도록 해줌
- lst = [ 반복내용 for _ in range(반복횟수)]
- 이렇게 쓰면 반복횟수만큼 반복할 내용을 수행한다.
N = int(input()) #행 정보 입력받기
>>> 3 #입력
#리스트 내포를 이용하여 N번 반복하며 한줄읽고 공백문자로 나눠서 숫자형으로 변환하고
#리스트(1차원배열)로 만들어 2차원 배열로 완성
arr = [list(map(int,input().split())) for _ in range(N)]
>>> 1 2 3 #공백으로 구분되어서 총 3행이 입력됨
>>> 4 5 6
>>> 7 8 9
print(arr)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] #출력하면 2차원리스트로 입력된 것 확인됨
입력을 받는 명령어를 처음보면 여러 명령들이 겹쳐있기 때문에 한번에 이해하기도 기억하기도 쉽지 않다. 위에서 정리한 대로 학습한다면 달달 외우지 않고 이해해서 사용할 수 있을 것이다!!
도움이 되었다면 공감/댓글은 사랑입니다 ^0^