여기에서 우리는 Python에서 경쟁 프로그래밍을 위한 다양한 I/O 방법을 볼 것입니다. 경쟁 프로그래밍에서는 다른 사람보다 유리하도록 가능한 한 빨리 입력을 읽는 것이 중요합니다.
코드포스 또는 유사한 온라인 주드(SPOJ와 같은)에 있고 숫자 a, b, c, d를 읽고 해당 제품을 인쇄해야 한다고 가정합니다. 여러 가지 방법이 있습니다. 하나씩 살펴보겠습니다.
이를 수행하는 한 가지 방법은 목록 이해와 지도 기능을 사용하는 것입니다.
방법 1 :목록 이해 사용
a, b, c, d = [int(x) for x in input().split()] print(a*b*c*d)
방법 2 :지도 기능 사용
a, b, c, d = map(int, input().split()) print(a*b*c*d)
위의 문제를 해결하는 또 다른 방법은 훨씬 빠른 stdin과 stdout을 사용하는 것입니다.
방법 1 :stdin 및 stdout을 사용한 목록 이해
from sys import stdin, stdout a, b, c, d = [int(x) for x in stdin.readline().rstrip().split()] stdout.write(str(a*b*c*d) + "\n")
문제에 대한 입력 및 출력 방법을 테스트할 수 있는 경쟁 프로그래밍의 또 다른 문제를 살펴보겠습니다. 문제는 INTEST-Enormous Input Test on SPOJ입니다.
입력
입력은 두 개의 양의 정수 n k (n, k<=10 7 ). 다음 n줄의 입력에는 10 9 이하의 양의 정수 ti가 포함됩니다. , 각각.
출력
출력할 단일 정수를 작성하여 k로 나눌 수 있는 정수 ti의 수를 나타냅니다.
어디
-
입력 :입력은 두 개의 양의 정수 n과 k로 시작합니다(여기서 - n, k <=10). 입력의 다음 줄에는 각각 10*9 이하의 양의 정수 t 하나가 포함됩니다.
-
출력 :k로 나눌 수 있는 정수 t의 수를 나타내는 단일 정수
예를 들어
Input 7 3 1 51 966369 7 9 999996 11 Output 4
방법 1
위의 문제를 해결하는 한 가지 방법은 효율적인 방법은 아니지만 아래에 있습니다.
def main(): n, k = [int(c) for c in input().split()] cnt = 0 for _ in range(n): t = int(input()) if t % k == 0: cnt += 1 print(cnt) if __name__ == "__main__": main()
방법 2
위의 문제를 해결하는 또 다른 효율적인 방법은 stdin과 stdout을 사용하는 것입니다. 아래 프로그램은 이전 프로그램에 비해 훨씬 빠르게 실행됩니다.
from sys import stdin, stdout def main(): n, k = [int(c) for c in input().split()] cnt = 0 for _ in range(n): t = int(stdin.readline()) if t % k == 0: cnt += 1 stdout.write(str(cnt)) if __name__ == "__main__": main()
방법 3
위에서 언급한 이전 두 가지보다 훨씬 빠른 위의 문제를 해결하는 또 다른 방법은 stdin과 stdout(방법 2에서 사용한 방식과 매우 유사)을 사용하는 것이지만 전체 입력을 한 번에 읽고 목록에 로드합니다.피>
def main(): for sys import stdin, stdout n, k = stdin.readline().split() n = int(n) k = int(k) cnt = 0 lines = stdin.readlines() for line in lines: if int(line) % k == 0: cnt += 1 stdout.write(str(cnt)) if __name__ == "__main__": main()