BOJ/Python

백준 1247번 부호 파이썬

띵지니어 2021. 7. 28. 16:04

https://www.acmicpc.net/problem/1247

 

1247번: 부호

총 3개의 테스트 셋이 주어진다. 각 테스트 셋의 첫째 줄에는 N(1≤N≤100,000)이 주어지고, 둘째 줄부터 N개의 줄에 걸쳐 각 정수가 주어진다. 주어지는 정수의 절댓값은 9223372036854775807보다 작거나

www.acmicpc.net

 

처음에 이 문제에 접근할때는 노가다? 형식으로 코딩을 하였다.

 

list1 = []
list2 = []
list3 = []
x = int(input())
for i in range(x):
    list1.append(int(input()))

y = int(input())
for j in range(y):
    list2.append(int(input()))
    
z = int(input())
for k in range(z):
    list3.append(int(input()))

Sum = []
Sum.append(sum(list1))
Sum.append(sum(list2))
Sum.append(sum(list3))

for i in range(3):
    if Sum[i] == 0:
        print("0")
    elif Sum[i] > 0:
        print("+")
    else:
        print("-")

당연하지만 시간 초과이고 효율적이지 않는 코드이니 이 부분은 넘어가 주길 바란다.

 

 

위의 코드의 경우 for문을 이용해 input()으로 입력을 받는 것 때문에 시간초과로 뜬다.

이걸 해결해주기 위해 파이썬 표준 라이브러리인 sys 라이브러리에 있는 sys.stdin.readline() 을 사용해서 입력을 받아야 한다. 

자세한 이유는 https://www.acmicpc.net/board/view/855 를 참고 해보도록 하자.

결론은 input()으로 받는 것 보다 sys.stdin.readline() 이걸로 받는게 빠르기 때문에 쓰는 것이다.

앞으로 많이 볼 코드이니 눈에 익히자.

사용 법은 

import sys
x = sys.stdin.readline()

이고 C언어의 gets() 함수와 비슷하다고 보면 된다.

>> 4를 입력 받으면

>> x에는 '4\n' 이 값으로 들어간다. (기본 str)

정수형으로 형변환 할때는 int(input())과 마찬 가지로

x = int(sys.stdin.readline())

으로 감싸주면 정수형으로 바뀐다.

이때는 당연히 하나만 입력을 받아야 한다.

4 5 이렇게 해버리면 어느 정수를 x에 넣을 지 인터프리터가 이해를 못하기 때문이다.

다시 문제로 들어가자면

from sys import stdin

list1 = []
for _ in range(3):
    n = int(stdin.readline())
    data = [int(stdin.readline()) for i in range(n)]
    list1.append(sum(data))

for i in range(3):
    if list1[i] == 0:
        print("0")
    elif list1[i] > 0:
        print("+")
    else:
        print("-")

맨위에 from sys import stdin

C++에서의 using namespace std; 에서

std::cout << 을 그냥

cout <<으로 사용할 수 있게 해주는 것처럼 편리하게 해주는 코드인데

무슨 말인지 모르겠으면

sys.stdin.readline() 을 --> stdin.readline()으로 사용할 수 있게 해준다고 간단하게 생각하면 될 것 같다.

암튼 입력을 stdin.readline()을 사용하여 리스트에 넣고, 리스트에 입력한 수의 합을 또 다른 리스트에 넣고 순서대로 출력하는 프로그램을 짰다.

코드 수를 줄이는데 좀 애먹었지만 이 문제를 통해 시간 초과는 이제 최대한 잘 해결할 수 있을 것 같다.

 

'BOJ > Python' 카테고리의 다른 글

백준 10171번 고양이 파이썬  (0) 2021.07.30
백준 1547번 공 파이썬  (0) 2021.07.28
백준 1546번 평균 파이썬  (0) 2021.07.27
백준 2562번 최댓값 파이썬  (0) 2021.07.24
백준 20499번 Darius님 한타 안함? 파이썬  (0) 2021.07.24