알고리즘/TIP - python

[python] 코딩테스트 문제에서 입력처리 정리

코딩딩 2020. 7. 31. 23:03

알고리즘 강의를 하다보면 생각보다 많은 학생들이 입력에서 막혀서 시간을 허비하는 것을 봤다.

이번 기회에 정리해 놓으면 한 분이라도 도움이 될것 같아서 정리해보도록 하겠다!! ^-^


코딩테스트에서는 대게 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^