λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» Programming/Python

[Python] μž…λ ₯ λ°›κΈ° : sys.stdin.readline()κ³Ό input()

by 지이닛 2023. 4. 30.

sys.stdin.readline() κ³Ό input()

 

νŒŒμ΄μ¬μ—μ„œ 보톡 input()으둜 값을 μž…λ ₯λ°›μ§€λ§Œ, 반볡문으둜 μ—¬λŸ¬ 쀄을 μž…λ ₯λ°›μ•„μ•Ό ν•  λ•ŒλŠ” μ‹œκ°„ 초과 λ¬Έμ œκ°€ λ‚  수 μžˆλ‹€κ³  ν•œλ‹€. 이럴 경우 import sys둜 λͺ¨λ“ˆμ„ 뢈러였고  sys.stdin.readline() 을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.


πŸ˜€ sys λͺ¨λ“ˆμ€ λ¬΄μ—‡μΌκΉŒ?

 

sys λͺ¨λ“ˆμ€ 파이썬 인터프리터와 κ΄€λ ¨λœ 정보와 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” λͺ¨λ“ˆμ΄λ‹€.sys λͺ¨λ“ˆμ€ κ°•μ œλ‘œ 슀크립트λ₯Ό μ’…λ£Œν•  수 있고, 파이썬 λͺ¨λ“ˆλ“€μ΄ μ €μž₯된 μœ„μΉ˜λ„ μ•Œ 수 μžˆλŠ” λ“± μ‹œμŠ€ν…œμ„ μ œμ–΄ν•  수 μžˆλŠ” λͺ¨λ“ˆλ‘œ μƒκ°λœλ‹€.

 

βž• stdin μ΄λž€?

stdin 은 λͺ¨λ“  λŒ€ν™”μ‹ μž…λ ₯에 μ‚¬μš©λœλ‹€.μš°λ¦¬κ°€ ν”νžˆ ν‚€λ³΄λ“œλ‘œ μž…λ ₯ν•˜λŠ” ν–‰μœ„ 뿐 μ•„λ‹ˆλΌ, 파일 λ“±μ˜ 넓은 λ²”μœ„μ˜ μž…λ ₯을 μ˜λ―Έν•œλ‹€.input() ν˜ΈμΆœμ„ ν¬ν•¨ν•˜κ³  μžˆλ‹€λŠ” 점에 μ£Όλͺ©.

 

πŸ“ input() λŒ€μ‹  sys.stdin.readline()을 μ‚¬μš©ν•˜λŠ” 이유

 

1. input() 이 호좜되면 Prompt λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•˜κ³  μ‚¬μš©μž μž…λ ₯을 κΈ°λ‹€λ¦°λ‹€.

2. μ΄λ•Œ ν‘œμ€€ μž…λ ₯은 ν‚€λ³΄λ“œ.

3. μ‚¬μš©μžκ°€ ν‚€λ₯Ό ν•˜λ‚˜μ”© λˆ„λ₯΄λ©΄ 이에 λŒ€μ‘ν•˜λŠ” 데이터가 버퍼에 λ“€μ–΄κ°„λ‹€.

4. Enter ν‚€λ₯Ό λˆ„λ₯΄λ©΄ κ°œν–‰λ¬Έμ œ(ex. \n)κ°€ μž…λ ₯되며, λ²„νΌμ˜ μž…λ ₯이 μ’…λ£Œλœ κ²ƒμœΌλ‘œ κ°„μ£Όλœλ‹€.

5. μž…λ ₯된 λ¬Έμžμ—΄μ€ ν•΄λ‹Ή μ‹œμŠ€ν…œμ˜ μ½˜μ†” μž…μΆœλ ₯ 인코딩을 μ‚¬μš©ν•˜μ—¬ λ””μ½”λ“œλ˜μ–΄ μœ λ‹ˆμ½”λ“œ λ¬Έμžμ—΄λ‘œ λ³€ν™˜λœλ‹€.

6. input() ν•¨μˆ˜λŠ” λ³€ν™˜λœ λ¬Έμžμ—΄ 값을 λ°˜ν™˜ν•˜λ©΄μ„œ μ’…λ£Œν•œλ‹€. 

 

즉, μ΄λŸ¬ν•œ 단계λ₯Ό 거치기 λ•Œλ¬Έμ— input() 은 비ꡐ적 속도가 느린 νŽΈμ΄λ‹€.

 

 

 

πŸ“ sys.stdin.readline()

 

βœ” sys.stdin.readline() 은 λ¬Έμžμ—΄λ‘œ μž…λ ₯을 λ°›λŠ”λ‹€.

λ”°λΌμ„œ λ§Œμ•½ μž…λ ₯받은 λ¬Έμžμ—΄μ„ μ •μˆ˜, μ‹€μˆ˜, 리슀트둜 μ‚¬μš©ν•  λ•ŒλŠ” μ μ ˆν•˜κ²Œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ²˜λ¦¬ν•΄μ€˜μ•Ό ν•œλ‹€.

 

βœ” κ°œν–‰ 문자 "/n"을 같이 μž…λ ₯λ°›λŠ”λ‹€.

예λ₯Ό λ“€μ–΄, "Hello, World!" λΌλŠ” λ¬Έμžμ—΄μ„ μž…λ ₯λ°›μ•˜μ„ λ•Œ.

sys.stdin.readline() 의 μž…λ ₯μœΌλ‘œλŠ” "Hello, World!/n" 이 λ“€μ–΄μ˜€κ²Œ λœλ‹€.

 

import sys

temp = sys.stdin.readline()
print(temp)  # "Hello, World!\n"

 

\n μ΄λΌλŠ” κ°œν–‰ λ¬Έμžκ°€ 같이 λ“€μ–΄μ˜€κΈ° λ•Œλ¬Έμ— λ”°λ‘œ λ¬Έμžμ—΄ 처리λ₯Ό ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

 

 

 

πŸ“ ν•œ 쀄에 ν•˜λ‚˜μ˜ κ°’ μž…λ ₯λ°›κΈ°

 

1️⃣ ν•˜λ‚˜μ˜ μ •μˆ˜ μž…λ ₯λ°›κΈ°

μ˜ˆμ‹œ μ½”λ“œ

import sys

num = int(sys.stdin.readline())  # 5μž…λ ₯
print(num)

좜λ ₯ κ²°κ³Ό

5
  • ν•˜λ‚˜μ˜ μ •μˆ˜ 값을 μž…λ ₯받을 λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€.
  • λ¬Έμžμ—΄λ‘œ μž…λ ₯λ°›κΈ° λ•Œλ¬Έμ— int() λ₯Ό μ‚¬μš©ν•΄μ„œ μ •μˆ˜λ‘œ λ³€κ²½ν•΄μ•Ό ν•œλ‹€.

 

2️⃣ κ°œν–‰ λ¬Έμžμ™€ ν•¨κ»˜ 문자/λ¬Έμžμ—΄ μž…λ ₯λ°›κΈ°

 

μ˜ˆμ‹œ μ½”λ“œ

import sys

s = sys.stdin.readline()  # Hello, World! μž…λ ₯
print(s)

좜λ ₯ κ²°κ³Ό

Hello, World!
  • κ°œν–‰ λ¬Έμžμ™€ ν•¨κ»˜ λ¬Έμžμ—΄μ„ μž…λ ₯받을 수 μžˆλ‹€.

 

 

3️⃣ κ°œν–‰ λ¬Έμžμ™€ 없이 문자/λ¬Έμžμ—΄ μž…λ ₯λ°›κΈ°

 

μ˜ˆμ‹œ μ½”λ“œ

import sys

""" μž…λ ₯
Hello, World!
Hello, World!
Hello, World!
"""

s1 = sys.stdin.readline().strip()
s2 = sys.stdin.readline().strip('\n')
s3 = sys.stdin.readline().strip('\n')

print(s1, s2, s3)

좜λ ₯ κ²°κ³Ό

Hello, World! Hello, World! Hello, World!
  • strip() 을 μ΄μš©ν•˜μ—¬ κ°œν–‰ 문자 없이 λ¬Έμžμ—΄μ„ μž…λ ₯받을 수 μžˆλ‹€.
  • strip() 은 λ¬Έμžμ—΄ μ–‘ μ˜†μ˜ \n, \t 등을 μ œκ±°ν•  수 μžˆλ‹€.
  • \tλŠ” 곡백에 ν•΄λ‹Ήν•˜κΈ° λ•Œλ¬Έμ— μΈμžμ—†μ΄ strip()을 μ“°λ©΄ 곡백도 같이 μ œκ±°λœλ‹€.
  • ν™•μ‹€ν•˜κ²Œ strip('\n') 을 μ“°κ±°λ‚˜, rstrip('\n') λ“± 인자λ₯Ό μ“°λŠ” κ±Έ μΆ”μ²œν•œλ‹€.
  • rstrip() 은 였λ₯Έμͺ½μ˜ κ³΅λ°±μ΄λ‚˜ κ°œν–‰ 문자λ₯Ό μ‚­μ œν•œλ‹€.
  • strip(), rstrip() 의 λ§€κ°œλ³€μˆ˜λ‘œ νŠΉμ • 문자λ₯Ό λ„£μœΌλ©΄ ν•΄λ‹Ή 문자λ₯Ό λ¬Έμžμ—΄μ—μ„œ μ œκ±°ν•œλ‹€.

 

βž• κ°œν–‰ 문자 확인 방법

μ˜ˆμ‹œ μ½”λ“œ

import sys

""" μž…λ ₯
Hello, World!
Hello, World!
"""

arr = []
s = sys.stdin.readline()
arr.append(s)
print(s)  # λ¬Έμžμ—΄ 좜λ ₯
print(arr)  # λ¬Έμžμ—΄ 넣은 λ°°μ—΄ 좜λ ₯

좜λ ₯ κ²°κ³Ό

Hello, World!

['Hello, World!\n']
  • ν•œ 칸이 λ„μ›Œμ§„ 것을 확인할 수 μžˆλ‹€.
  • 배열에 넣어보면 "\n"이 λ“€μ–΄μžˆλŠ” κ±Έ 확인할 수 μžˆλ‹€.

 

 

πŸ“ ν•œ 쀄에 2개 μ΄μƒμ˜ κ°’ μž…λ ₯λ°›κΈ°

 

1️⃣ 두 개 μ΄μƒμ˜ μ •μˆ˜ μž…λ ₯λ°›κΈ°

μ˜ˆμ‹œ μ½”λ“œ

import sys

N, M = map(int, sys.stdin.readline().split())	#5 4 μž…λ ₯
print(N, M)

좜λ ₯ κ²°κ³Ό

5 4
  • map() 을 μ΄μš©ν•˜μ—¬ 두 개 μ΄μƒμ˜ μ •μˆ˜λ₯Ό μž…λ ₯받을 수 μžˆλ‹€.
  • 리슀트둜 λ°˜ν™˜ν•˜κ³  μ‹Άλ‹€λ©΄ map()을 list()둜 κ°μ‹Έμ€˜μ•Ό 함.

 

βž• λ§Œμ•½ map() ν•¨μˆ˜κ°€ μ—†λ‹€λ©΄?

μ˜ˆμ‹œ μ½”λ“œ

a, b = int(sys.stdin.readline().split())
print(a,b)

좜λ ₯ κ²°κ³Ό

 

  • νƒ€μž… μ—λŸ¬ λ°œμƒν•œλ‹€.
  • sys.stdin.readline().split()은 리슀트둜 λ°˜ν™˜λ˜λŠ”λ°,
  • int() ν•¨μˆ˜ μ•ˆμ˜ λ§€κ°œλ³€μˆ˜μ—λŠ” λ¦¬μŠ€νŠΈκ°€ λ“€μ–΄μ˜€λ©΄ μ•ˆλ˜κ³ , λ¬Έμžμ—΄/객체/숫자 νƒ€μž…μ΄ 듀어와야 ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

 

1️⃣ 두 개 μ΄μƒμ˜ 문자/λ¬Έμžμ—΄ μž…λ ₯λ°›κΈ°

μ˜ˆμ‹œμ½”λ“œ

import sys

""" μž…λ ₯
he l wo d
"""

strings = sys.stdin.readline().split()
print(strings)

좜λ ₯ κ²°κ³Ό

['he', 'l', 'wo', 'd']
  • 곡백을 κΈ°μ€€μœΌλ‘œ 문자/λ¬Έμžμ—΄μ„ μž…λ ₯받을 수 μžˆλ‹€.
  • sys.stdin.readline().split() λŠ” 리슀트λ₯Ό λ°˜ν™˜ν•œλ‹€.

 

πŸ“ μ—¬λŸ¬ 쀄에 κ±Έμ³μ„œ μž…λ ₯λ°›κΈ°

 

1️⃣ 두 개 μ΄μƒμ˜ μ •μˆ˜ μž…λ ₯λ°›κΈ°

μž…λ ₯ μ˜ˆμ‹œ

4 3
1 0 0
0 1 0
0 0 1
1 1 1
  • μ—¬λŸ¬ 쀄에 걸쳐 곡백을 κΈ°μ€€μœΌλ‘œ λ–¨μ–΄μ Έ μžˆλŠ” μ •μˆ˜λ₯Ό μž…λ ₯받을 λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€.

 

(1) 2차원 λ°°μ—΄λ‘œ μž…λ ₯λ°›κΈ°

 

μ˜ˆμ‹œ μ½”λ“œ

import sys

rows, cols = map(int, sys.readline().split())
matrix = []

for r in range(rows):
	matrix.append(list(map(int, sys.stdin.readline().split())))
    
print(matrix)

좜λ ₯ κ²°κ³Ό

[[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 1, 1]]

 

(2) 2차원 λ°°μ—΄λ‘œ μž…λ ₯λ°›κΈ° - ν•œ 쀄에

 

μ˜ˆμ‹œμ½”λ“œ

import sys

rows, cols = map(int, sys.stdin.readline().split())
matrix = [list(map(int, sys.stdin.readline().split())) for r in range(rows)]

print(matrix)

좜λ ₯ κ²°κ³Ό

[[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 1, 1]]
  • μœ„μ™€ λ™μΌν•˜μ§€λ§Œ ν•œ 쀄에 μž…λ ₯받을 수 μžˆλŠ” μ½”λ“œ

 

 

πŸ“ 곡백 없이 μ£Όμ–΄μ§€λŠ” μ •μˆ˜ μž…λ ₯λ°›κΈ°

 

μž…λ ₯ μ˜ˆμ‹œ

4 3
100
010
001
111
  • μ—¬λŸ¬ 쀄에 걸쳐 곡백 없이 μ£Όμ–΄μ§€λŠ” μ •μˆ˜λ₯Ό μž…λ ₯받을 λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€.

 

1) 1차원 λ°°μ—΄λ‘œ μž…λ ₯λ°›κΈ°

 

μ˜ˆμ‹œ μ½”λ“œ

import sys

rows, cols = map(int, sys.stdin.readlint().split())
maxtrix = [[0]] * rows	# μš°μ„ μ μœΌλ‘œ μ΄ˆκΈ°ν™”

for r in range(rows):
	matrix[r] = sys.stdin.readline().strip()
    
print(matrix)

좜λ ₯ κ²°κ³Ό

['100', '010', '001', '111']

 

 

2) 1차원 λ°°μ—΄λ‘œ μž…λ ₯λ°›κΈ° - ν•œ 쀄에

 

μ˜ˆμ‹œ μ½”λ“œ

import sys

rows, cols = map(int, sys.stdin.readline().split())
matrix = [sys.stdin.readline().split() for r in range(rows)]

print(matrix)

좜λ ₯ κ²°κ³Ό

['100', '010', '001', '111']