이것이 취업을 위한 코딩테스트다 with 파이썬
입력
알고리즘 문제의 첫 번째 단계는 데이터를 입력 받는 것이다.
적절한 입력이 주어졌을 때, 그 입력을 받아서 적절한 알고리즘을 수행한 뒤의 결과를 출력하는 것을 요구하기 때문.
input()
파이썬에서 데이터를 입력 받을 때는 input() 을 이용.
한 줄의 문자열 입력 받음.
입력 받은 데이터를 정수형 데이터로 처리하기 위해서는 문자열을 정수로 바꾸는 int() 함수를 사용해야 함.
데이터를 공백으로 구분할 때 - list(map(int, input().split()))
-> 반드시 암기해야 하는 코드 !
여러 개의 데이터를 입력 받을 때는 데이터가 공백으로 구분되는 경우가 많다.
입력 받은 문자열을 띄어쓰기로 구분하여 각각 정수 자료형의 데이터로 저장하는 코드 사용 빈도가 매우 높다.
list(map(int, input().split())) 동작 과정
1. input()으로 입력 받은 문자열을 split()을 이용해 공백으로 나눈 리스트로 바꿈
2. map을 이용하여 해당 리스트의 모든 원소에 int() 함수를 적용
3. 최종적으로 그 결과를 list()로 다시 바꿈.
-> 입력 받은 문자열을 띄어쓰기로 구분하여 각각 숫자 자료형으로 저장하게 되는 것.
C/C++의 scanf()는 공백, 줄 바꿈을 모두 동일하게 처리한다.
파이썬에서는 구분자가 줄 바꿈인지 공백인지에 따라서 다른 처리를 요구한다.
줄 바꿈이라면 int(input())을 여러 번 사용하면 되는데, 공백이라면 이렇게 사용해야하므로 구분해서 알아두자.
입력을 위한 전형적인 소스코드
# 데이터의 개수 입력
n = int((input())
# 각 데이터를 공백으로 구분하여 입력
data = list(map(int, input().split()))
data.sort(reverse = True)
print(data)
공백을 기준으로 구분하여 적은 수의 데이터 입력
공백으로 구분된 데이터의 개수가 많지 않다면,
단순히 map(int, input().split())을 이용하는 것도 가능하다.
문제에서 첫째 줄에 n, m, k가 공백으로 구분되어 입력된다는 내용이 명시되어있다면 다음과 같이 쓸 수 있다.
# n, m, k를 공백으로 구분하여 입력
n, m, k = map(int, input().split())
print(n, m, k)
입력을 최대한 빠르게 받아야 할 때 - sys.stdin.readline().rstrip()
흔히 정렬, 이진 탐색, 최단 경로 문제의 경우, 매우 많은 수의 데이터가 연속적으로 입력이 되곤 한다.
예를 들어 1,000만 개가 넘는 라인이 입력되는 경우, 입력을 받는 것만으로도 시간 초과를 받을 수 있다.
그래서 사용하는 언어별로 입력을 더 빠르게 받는 방법을 알고 있어야 한다.
C++에서는 cin을 이용해 입력 받기 보다, scanf()를 사용하는 것이 권장된다.
자바의 경우에도 문법은 다르지만 비슷한 양상을 보인다.
파이썬도 마찬가지다.
입력의 개수가 많은 경우에 단순히 input() 함수를 그대로 사용하지는 않는다.
파이썬의 기본 input() 함수는 동작 속도가 느려서 시간 초과로 오답 판정을 받을 수 있기 때문이다.
이 경우
파이썬의 sys 라이브러리에 정의되어 있는 sys.stdin.readline() 함수를 이용한다.
input() 함수와 같이 한 줄씩 입력받기 위해 사용한다.
import sys
sys.stdin.readline().rstrip()
sys 라이브러리를 사용할 때는 한 줄 입력을 받고나서 rstrip() 함수를 꼭 호출해야 한다.
readline()으로 입력하면 입력 후 엔터가 줄 바꿈 기호로 입력되는데,
이 공백 문자를 제거하려면 rstrip() 함수를 사용해야 한다.
외워라.
import sys
# 문자열 입력받기
data = sys.stdin.readline().rstrip()
print(data)
출력
pirint() : 변수나 상수를 매개변수르 입력받아 이를 표준 출력으로 출력함.
a = 1
b = 2
print(a, b) # 출력 : 1 2
print()는 기본적으로 출력 이후에 줄 바꿈을 수행함.
-> print()를 사용할 때마다 줄이 변경됨.
문자열과 수를 함께 출력하기
단순히 더하기 연산자(+)를 이용하여 문자열과 수를 더하면 오류가 발생한다.
TypeError: can only concatenate str (not "int") to str
이 경우, 2가지 방법으로 해결할 수 있다.
1. str() 함수로 변수 데이터를 문자열로 바꾸어 출력
answer = 7
print("정답은 " + str(answer) + "입니다.") # 정답은 7입니다.
2. 각 자료형을 콤마(,)를 기준으로 구분하여 출력
answer = 7
print("정답은", answer, "입니다.") # 정답은 7 입니다.
각 변수를 콤마로 구분하여 출력하는 경우, 변수의 값 사이에 의도치 않은 공백이 삽입될 수 있다는 점을 신경 쓰자.
f-string 문법 (Python 3.6 이상 버전)
문자열 앞에 접두사 'f'를 붙임으로써 사용.
단순히 중괄호 안에 변수를 넣음으로써, 자료형의 변환 없이도 간단히 문자열과 정수를 함께 넣을 수 있다.
answer = 7
print(f"정답은 {answer}입니다."}