JaeYeongSong
Xsop의 개발일기
JaeYeongSong
전체 방문자
오늘
어제
  • 분류 전체보기 (41)
    • 💻 Python (17)
      • Python 기초 강의 (6)
      • 비트코인 자동 매매 (7)
      • 크롤링 (3)
      • 알고리즘 (1)
    • ✨ JavaScript (9)
      • Basic (8)
      • Node.js (1)
    • ⭐ HTML (9)
    • 🌟 API (2)
    • 💡 일상 (3)

블로그 메뉴

  • 홈
  • 태그
  • 게시물

공지사항

인기 글

태그

  • 기초 문법
  • Web
  • Python
  • 봇
  • 자료형
  • 웹 사이트
  • JavaScript
  • input
  • 비트코인
  • 태그
  • Slack
  • 웹
  • 시장가
  • upbit
  • callback
  • upbit api
  • 웹 페이지 크롤링
  • Web page Crawling
  • 동기
  • 자산 조회
  • 비트코인 자동매매
  • HTML
  • 지정가
  • API
  • Crawling
  • slack api
  • 글쓰기
  • 비동기
  • 크롤링
  • 문자열

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JaeYeongSong

Xsop의 개발일기

💻 Python/알고리즘

[Python] 입력 받기(input VS sys.stdin.readline 차이점)

2021. 11. 6. 22:58

input과 sys.stdin.readline의 차이점

input은 입력받은 값의 개행(줄바꿈) 문자를 삭제시켜 받아옵니다.

개행 문자를 삭제시킨다는 것은 줄바꿈을 없앤다는 겁니다. 원래 문자열에서 어떤 작업을 취했으니 속도가 느려졌겠죠?

하지만 sys.stdin.readline은 개행 문자를 포함한 값을 받아옵니다. 그러면 input에 비해 속도가 어느정도는 늦어지지 않을 겁니다. 그리고 줄바꿈을 한 정보를 입력받을 때에도 유용합니다.

빠르게 정보를 받아오기 위해서는 sys.stdin.readline을 사용하면 좋습니다.

그래서 알고리즘에서 사용하겠죠? 제한된 자원안에서 목적을 빨리 수행하는 게 알고리즘이니까요.

 

input은 매개변수로 문자열(String)을 받아, Console에 출력합니다.

Console에 출력을 한다는 것은 문자열을 입력받는 일 외에 하나 더 있다는 것을 알 수 있습니다.

그러면 첫번째 차이점과 같이 속도가 어느 정도는 늦어지겠죠?

하지만 Console에 출력을 해야할 때에는 input을 사용합니다.

💡 속도가 중요한 문제, 특히 알고리즘 문제 같은 경우에서 sys.stdin.readline을 사용합니다.


sys.stdin.readline 사용법

Code

import sys

a = sys.stdin.readline()

input과 sys.stdin.readline의 차이점'에서 설명했듯이 sys.stdin.readline은 개행 문자를 입력받습니다.

그래서 여러줄을 입력받을 수 있기 때문에 ^z를 사용하면 입력받기를 종료해줍니다.

여기서 개행 문자를 삭제하기 위해서 2가지 방식을 사용합니다.

  1. type을 int(정수형)로 바꿔서 '\n' 같은 개행 문자를 받지 못하도록 하기
  2. 개행 문자를 제거해주는 함수 사용하기 (Ex. strip)

Code - type을 정수형으로 변경

import sys
a = int(sys.stdin.readline())​

Code - 개행 문자를 제거하는 함수 이용

import sys

a = sys.stdin.readline().strip()

💡 개행 문자가 필요 없다면 위와 같은 방식을 사용해서 sys.stdin.readline를 사용합니다.


sys.stdin.readline로 원하는 만큼만 입력받기

^z를 사용하지 않고 원하는 만큼만 sys.stdin.readline를 사용하여 입력받고 싶다면

처음에 input으로 원하는 줄을 지정해주셔서 for문으로 sys.stdin.readline을 반복해주시면 됩니다.

Code

import sys

l = int(input()) # sys.stdin.readline 사용할 횟수
for i in range(l):
	a = sys.stdin.readline()

💡 input에도 적용할 수 있습니다.

하지만 input은 input을 여러 번 해야 한다면 적용을 하는 게 올바르지,

그냥 2~3 줄을 input으로 받는 코드에서 적용을 하게 된다면 코드 보기가 힘듭니다.

참고로 그런 상황이라면 sys.stdin.readline 사용하는게 효율이 좋습니다.

시간을 줄일 수 있기 때문입니다.


sys.stdin.readline로 한 줄에 여러가지 정수 입력받기

1 2 3 11 22 33​

한 줄에 위와 같이 여러 가지 숫자를 받아야 한다면 아래 코드와 같이 사용해주시면 됩니다.

Code

import sys

a = int(sys.stdin.readline().split()) # int, split 함수 추가

💡 input에도 적용할 수 있습니다. 


저작자표시 (새창열림)
    JaeYeongSong
    JaeYeongSong
    "I walk slowly, but I never walk backwards. - Abraham Lincoln" "나는 천천히 걷지만 결코 뒤로 걷지 않는다. - 에이브러햄 링컨" #코딩 #Python #JavaScript

    티스토리툴바