[Python] 문자열 입력하기
진짜 문자열을 입력 할 줄 몰라서 적은게 아니고, 백준의 다양한 입력 유형에 대응해서 입력 받기 위한 내용이다.
여기서의 input()은 백준에서 권장하는 sys.stdin.readline()과 동의어임을 사전에 전제한다.
나는 C++으로만 알고리즘 문제를 해결해왔던지라 모든 if문에 괄호를 때려박고 있을정도로 DNA에 뭐가 박혀있다.
그래서 이 내용을 자주 까먹고 있어서 남기려고 작성.
우선 개행에 의해 나눠지는 내용은 input()을 여러 번 때려박으면 되는 문제이다.
논외로, int(input())를 여러 번 때려박아도 되는데 나는 이런식의 replace를 선호하는 편이다 :
inputA = input()
inputA = int(inputA)
제일 원초적인 입력은 이렇게 해결 할 수 있다. 그리고 (a, b)와 같이 범위가 입력 될 수도 있는데 이 내용은 아래를 참조한다.
하지만 이런식의 입력 양식은 보기만해도 빡친다.
1 1 1 1 1 1 1
12345
첫번째 유형에서 또 두 가지로 나눌 수 있다.
n을 사전에 입력받은 경우, 또는 n이 문제에서 정해져있는경우
몇몇 문제는 배열의 갯수를 사전에 정해주기도 하고 위와 같은 식의 입력 직전에 n을 입력받곤 한다.
field = list(map(int, input().strip().split()))[:n]
그렇다면 이런식으로 작성 할 수 있다. 핀트는 맨 우측에 있는 [:n]이다. 저 n은 입력 받을 양의 갯수를 정한 것을 반영하기 위해 존재한다.
n은 잘 모르겠읍니다. 의 경우
이런 문제는 흔치는 않았던 것 같은데, 방금 위의 코드에서 [:n] 부분만 지워주면 된다.
즉, [:n]이 없는 모양의 저 코드가 이미 띄어쓰기 단위로 list에 item들을 때려박는 역할을 하게 된다.
하지만 field가 아니라 해당 자리를 inputA, inputB로 바꿔보자.
inputA, inputB = list(map(int, input().strip().split()))
이건 쌍의 입력을 받을 수 있다. 알아서 A, B에 나눠져서 투입된다.
적고나니 오히려 다른 유형의 정해진 갯수 입력 같지만 어쨌든 이런 류의 입력도 많이 선호되는 편이다.
두번째 유형으로 들어오는 입력을 배열로 처리하는 방법을 생각해보자.
arr = [list(map(int,input()))
strip().split()만 없애면 띄어쓰기 하지 않은 입력에 대해 대응하여 작동 시킬 수 있다.
이 코드 또한 뒤에 범위를 정해준다면 n을 알고 있는 상황에 대응 시킬 수 있다.
계속 해보겠다.
2차원 배열
백준 문제가 쉬운 느낌이 들며 재미를 보고 있을 때면 x, y 또는
행과 열이 가로더라 세로더라라는 저차원적 고민까지 하게되는 2차원 배열에 대해 다뤄보겠다.
보통 2차원 배열은 범위를 정해 놓곤 하니 범위를 가지는 영역에 대해 설명을 하겠다.
n = int(input())
arr = [list(map(int,input())) for _ in range(n)]
2차원 형태로 부름이 가능하고, 완전히 칸칸히 분리를 전제한다.
(문자로 작성하겠다면 map()을 제거 하도록 한다)