코딩테스트

[Python] 유용한 파이썬 코딩테스트 코드

유정주 2023. 6. 2. 12:01
반응형

파이썬으로 코딩테스트를 풀면서 유용하다고 느낀 코드입니다.

문제 풀면서 업데이트 예정입니다.

 

단순 입력

파이썬에서는 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("-")

아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

 

 

반응형