백준 5430번을 풀면서 python의 입/출력 형식과 관련하여 정리를 한 번 해야겠다고 생각했다. 알고는 있지만 오랜만에 쓰려고 하면 헷갈릴 때가 있기 때문이다.
입력의 경우 input()으로 받을 수 있고, 여러 개를 따로 따로 입력 받을때는 n, m = map(자료형,input().split()) 와 같은 형태로 받을 수 있다. 리스트로 입력받고 싶으면 array = list(map(자료형,input().split())) 으로도 받을 수 있다. 이런 건 아주 기본적이고 간단한 입력 예제다. 5430번의 경우에는 입력 형식이 [1,2,3] 이런 식이었다.입력 받은 것에서 [ 과 ]을 제외하고, 숫자 사이의 ,을 빼서 입력값을 받아야했다. 따라서 다음과 같이 할 수있다.
1) array=input().lstrip('[').rstrip(']').split(',')
2) array=input().rstrip()[1:-1].split(',')
1번의 경우는 [,]을 각각 분리해준 후에 split으로 , 을 기준으로 분리해주고, 2번의 경우에는 rstrip으로 가장 오른쪽 공백을 삭제해주고 1번째 문자열부터 가장 마지막 문자열까지 가져온 후에 split으로 , 을 기준으로 분리해준다. 어느쪽이어도 정상적으로 동작하는 것 같다. 다만, [] 가 들어올 경우를 대비하여 개수 값이 0일 떄는 따로 설정해주어야 한다.
cf) 시간 초과를 방지 하기 위해(input은 파라미터값으로 prompt 메시지를 받아야하며 입력값 하나마다 버퍼에 저장하고, sys.stdin.readline은 파라미터를 받지 않고 개행문자까지 포함한 하나의 줄을 바로 버퍼에 입력받아서 더 빠르다고 한다. 참고) 빠르게 입력받으려면 sys.stdin.readline()을 사용할 수 있다. 단, 문자열 n개를 한 번에 for문을 이용해 입력 받을 때는 strip()을 해줘야한다. 그냥 문제 풀때는 input으로 받는 코드 작성하고 제출 할때 input=sys.stdin.readline 해줘도 됨.
출력의 경우에도 [1,2,3] 과 같은 형식으로 해야한다. list 형식으로 저장해서 문제를 풀 것이기 때문에 그냥 for문으로 출력을 돌려도 되지만, 이러면 불편하고, 마지막 원소의 경우에는 따로 처리를 해줘야한다.
우선 list 형식을 한 줄에 출력하는 방법으로는 다양한 방법들이 있다. arr=[1,2,3]이라는 리스트가 있다고 가정할때, 1 2 3으로 출력하고 싶다면 다음과 같은 방법을 쓸 수 있다.
1)print(*arr)
2)print(" ".join(i for i in arr))
3)for(i in arr):
print(i, end=' ')
한 줄에 출력하기에는 1번이 가장 간단한데, [1,2,3]과 같은 형식으로 출력해야하므로 2번을 선택했다. (3번의 경우에는 1,2,3, 으로 출력이 될 것이다.) 따라서 print("["+",".join(i for i in arr)+"]")으로 입력해주면 [1,2,3]과 같은 형식으로 출력이 가능하다.