파이썬으로 코딩테스트를 풀면서 유용하다고 느낀 코드입니다.
문제 풀면서 업데이트 예정입니다.
단순 입력
파이썬에서는 input( )을 이용해 입력받을 수 있습니다.
하지만 sys.stdin.readline을 이용하면 더 빠른 입력이 가능합니다.
import sys
sys.stdin.readline()
여러 행을 입력받는 경우 개행이 \n로 입력됩니다.
이를 없애기 위해 rstrip( )을 함께 사용합니다.
sys.stdin.readline().rstrip()
매번 위 코드를 작성할 순 없습니다. (너무 기니까요.)
sys.stdin.readline 을 하나의 변수에 담아 사용 가능합니다.
import sys; readl = sys.stdin.readline
readl().rstrip()
입력 받은 결과는 배열에 바로 대입 가능합니다.
아래는 정수 두 개를 빈 칸 기준으로 입력 받는 코드입니다.
n, m = map(int, readl().split())
배열 입력
빈 칸 기준으로 입력
빈 칸을 기준으로 입력이 주어지는 경우 split( )을 이용해 배열화합니다.
list(readl().split())
정수로 입력받고 싶다면 map 을 이용합니다.
list(map(int, readl().split()))
연속적으로 입력
빈 칸 없이 입력되는 경우 바로 배열로 변환합니다.
list(readl().rstrip())
개행도 배열 아이템으로 들어가기 때문에 rstrip( )을 호출해야 합니다.
배열 출력
단순 반복문으로 배열을 출력해도 되지만, print의 sep 옵션을 이용해 편하게 출력할 수 있습니다.
arr = [1, 2, 3, 4, 5]
print(*arr, sep= "\n")
2차원 배열 90도 회전
2차원 배열을 시계방향으로 90도 회전하는 코드입니다.
zip을 이용해 쉽게 회전시킬 수 있습니다.
def spin(arr):
return list(zip(*arr[::-1]))
반시계방향으로 90도 회전하는 코드는 아래와 같습니다.
def spin(arr):
return list(zip(*arr))[::-1]
Gravity 적용
Puyo Puyo처럼 중력을 적용해야 하는 문제가 있습니다.
아래는 위에서 아래로 중력을 적용하는 코드입니다.
[반복문을 이용한 버전]
def gravity(r, c):
for j in range(c):
tmpList = []
for i in range(r):
if arr[i][j] != ".":
tmpList.append(arr[i][j])
tmpList = ["."] * (r - len(tmpList)) + tmpList
for i in range(r):
arr[i][j] = tmpList[i]
[축약 코드를 이용한 버전]
def gravity(r, c):
for j in range(c):
tmpList = [arr[i][j] for i in range(r) if arr[i][j] != "."]
tmpList = ["."] * (r - len(tmpList)) + tmpList
for i in range(r):
arr[i][j] = tmpList[i]
출력 예시입니다.
arr = [[".", ".", "."],
["A", "B", "C"],
[".", ".", "."]]
gravity(3, 3)
for line in arr:
print(line)
# ['.', '.', '.']
# ['.', '.', '.']
# ['A', 'B', 'C']
특정 문자로 문자열 나누기
: 또는 , 등 특정 문자로 문자열을 나눌 때는 split( )에 파라미터를 전달하면 됩니다.
readLine().rstrip().split("-")
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.