티스토리 뷰

반응형
 

15552번: 빠른 A+B

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

www.acmicpc.net

 

[백준/python] 1000번 - A+B / 새싹

1000번: A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net A,B = map(int,input().split()) print(A+B) python에서 사용자의 입력을 받는 방법은 2가지가 있다. 하나는 input()

sikaro.tistory.com

n,*a=map(int,open(0).read().split())
print(' '.join(str(a[i]+a[i+1])for i in range(0,2*n,2)))

1000번 A+B 문제에서 설명했던 sys.stdin.readline()에 대해서 나온다.

이것은 입출력 방식을 input()보다 더 빠르게 해주는 것으로 자세한 것은 위의 1000번 A+B 포스팅을 참고하자.

 

입출력방식이 하나 더 있는데, open(0).read()이다. 이것은 입력받는 숫자가 몇개인지 모를 경우에 사용한다. 입력을 전부 받아서 출력해줄 수 있으므로 유용하다. 하지만 안타깝게도 터미널에서는 실행되지 않는다.

위의 문제에서 n,*a를 하게 되면, 첫번째 라인의 숫자는 n으로 들어간다. 그리고 두번째 라인의 숫자부터 a에 들어가게 되는데, 이때 a앞에 붙은 *은 Asterisk라고 한다.

 

이 Asterisk의 역할은 총 4가지이다.

 

1. 곱셈 및 거듭제곱 연산으로 사용할 때

2. 리스트형 컨테이너 타입의 데이터를 반복 확장하고자 할 때

3. 가변인자 (Variadic Arguments)를 사용하고자 할 때

4. 컨테이너 타입의 데이터를 Unpacking 할 때

 

여기서 우리가 쓰는 건 4번이다. open(0).read()로 받은 데이터는 *a로 입력하게 되면 각각으로 분리된 list로 변환된다고 보면 된다.

1 1
12 34
5 500
40 60
1000 1000

# *a에 넣으면 => [1, 1, 12, 34, 5, 500, 40, 60, 1000, 1000]

따라서 0부터 2*n까지, 2개씩 짝지어서 a+b를 수행해주면 된다.

반응형