티스토리 뷰
반응형
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를 수행해주면 된다.
반응형