< 백준 - 15552 >
백준 15552번 이름은 '빠른 A+B'이다.
문제 :
본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.
Python을 사용하고 있다면, input 대신 sys.stdin.readline 을 사용할 수 있다. 단, 이때는 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.
rstrip을 하라는 건 문자열 자체를 변수에 저장하고 싶을 때 얘기지, 개행문자가 맨 끝에 들어와도 int 변환이나 split()을 그대로 할 수 있습니다. 즉 int(sys.stdin.readline()), sys.stdin.readline().split() 이렇게 해도 아무 문제 없습니다. 참고로 이름이 꽤 길기 때문에 저는 input = sys.stdin.readline을 맨 처음에 함으로써 쓰는 편입니다. (출처 : acmicpc)
입력 :
첫 줄에 테스트 케이스 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A, B가 주어진다. A, B는 1 이상 1,000 이하이다.
출력 :
각 테스트 케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.
< 출력은 제대로 되지만, 시간초과로 오답인 코드 >
이 코드 시간초과로 오답이다.
문제를 다시 꼼꼼히 읽어보자. 입출력 방식이 느린 input( ) 대신 sys.stdin.readline을 사용하라고 돼 있다. 만약 T가 1,000,000이라면 3번 줄에 input( )이 1,000,000번 반복될 것이다. 이때 for문을 빨리 돌려주기 위해 input( ) 보다는 sys.stdin.readline이 더 좋은 코드라는 걸 알 수 있다.
< sys.stdin.readline 을 사용한 정답 코드 >
제일 먼저 sys 모듈을 import 해주는데, sys 모듈은 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모델이다. (<점프 투 파이썬>에서 자세히 알아보기)
sys.stdin.readline을 이용해 풀어야 하는 또 다른 백준 문제가 있다.
백준 2751번 수 정렬하기2 문제다.
< 내 코드 >
dddd
백준 15552번 이름은 '빠른 A+B'이다.
문제 :
본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.
Python을 사용하고 있다면, input 대신 sys.stdin.readline 을 사용할 수 있다. 단, 이때는 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.
rstrip을 하라는 건 문자열 자체를 변수에 저장하고 싶을 때 얘기지, 개행문자가 맨 끝에 들어와도 int 변환이나 split()을 그대로 할 수 있습니다. 즉 int(sys.stdin.readline()), sys.stdin.readline().split() 이렇게 해도 아무 문제 없습니다. 참고로 이름이 꽤 길기 때문에 저는 input = sys.stdin.readline을 맨 처음에 함으로써 쓰는 편입니다. (출처 : acmicpc)
입력 :
첫 줄에 테스트 케이스 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A, B가 주어진다. A, B는 1 이상 1,000 이하이다.
출력 :
각 테스트 케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.
< 출력은 제대로 되지만, 시간초과로 오답인 코드 >
1 2 3 4 | T = int(input()) for i in range(T): A, B = map(int, input().split()) print(A+B) |
이 코드 시간초과로 오답이다.
문제를 다시 꼼꼼히 읽어보자. 입출력 방식이 느린 input( ) 대신 sys.stdin.readline을 사용하라고 돼 있다. 만약 T가 1,000,000이라면 3번 줄에 input( )이 1,000,000번 반복될 것이다. 이때 for문을 빨리 돌려주기 위해 input( ) 보다는 sys.stdin.readline이 더 좋은 코드라는 걸 알 수 있다.
< sys.stdin.readline 을 사용한 정답 코드 >
1 2 3 4 5 | import sys T = int(input()) for i in range(T): a, b = map(int, sys.stdin.readline().split()) print(a + b) |
제일 먼저 sys 모듈을 import 해주는데, sys 모듈은 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모델이다. (<점프 투 파이썬>에서 자세히 알아보기)
sys.stdin.readline을 이용해 풀어야 하는 또 다른 백준 문제가 있다.
백준 2751번 수 정렬하기2 문제다.
< 내 코드 >
1 2 3 4 5 6 7 8 | import sys N = int(input()) my_list = [] for i in range(N): my_list.append(int(sys.stdin.readline())) for i in sorted(my_list): print(i) |
dddd
0 Comments
Post a Comment