[Algorithm] 2차원 배열 세로 접근

업데이트:


시작하며


알고리즘 문제를 잡고 씨름을 하다가도, “맞았습니다!!” 가 나오면 지치고 힘들었던 과거를 잊게 만듭니다.

image

오늘은 백준 문제를 풀고 결과가 맞게 나왔는데, 아무래도 시간이 많이 걸린 것 같았습니다.

그래서 해당 문제를 푼 다른 사람들의 시간을 봤는데,

비교해보니 역시나 제 코드는 비교적 훨씬 많은 시간이 걸렸습니다.

그렇게 다른 분들의 풀이를 보며 감탄하다가, “정리해야겠다!!” 싶은 내용이 있어 글을 적습니다.



2차원 배열


보통 DFS/BFS 분류 문제에서 입력으로 주어지는 2차원 보드입니다.

<입력 예시>

0 1 2 3

4 0 5 6

7 1 0 2

3 4 5 0


보통 이런 입력이 들어오면, 2차원 배열로 자료를 가지게 됩니다.

board = [list(map(int, input().split())) for _ in range(N)]
[[0, 1, 2, 3], [4, 0, 5, 6], [7, 1, 0, 2], [3, 4, 5, 0]]


이 입력을 2차원 처럼 그려보면 아래와 같이 되겠죠?

image

그런데, 이 배열을 세로로 읽으려고 한다면, 어떻게 할 수 있을까요?

꼭 반복문을 써야할까요?

=> 파이썬을 사용하신다면, 지금부터는 그러지 않아도 됩니다!!



zip함수와 Asterisk 이용


파이썬의 내장함수인 zip함수와 Asterisk(“*”) 를 사용해봅시다. ^o^

1) zip함수

먼저 zip의 사용방법은 다음과 같습니다.

image

즉, 파라미터로 반복 가능한 자료형을 받아서 “묶어주는 역할을 하는 함수” 입니다.

cf) 점프 투 파이썬


2) Asterisk(*)

다음은 Asterisk(*)를 어떻게 쓰려고 하는지 확인해볼게요!

(*는 발음할 때마다 한번씩 멈칫하게 되지 않나요,, 😅 )

<사용 용도>

  1. 곱셈/거듭제곱 연산
  2. 리스트 데이터 초기화
  3. 가변인자
  4. 데이터 unpacking

=> 여기서는 unpacking하는 용도로 사용하여 역할을 합니다.


이렇게 zip함수Asterisk(*) 를 함께 이용하면, 리스트를 세로로 접근할 수 있게 됩니다.

vertical_lst = list(zip(*board))
[(0, 4, 7, 3), (1, 0, 1, 4), (2, 5, 0, 5), (3, 6, 2, 0)]

끝입니다. 여러분,, 😦 ,,,,

파이썬을 많이 안다고 생각했는데, 오늘도 또 배웁니다,,, 🚀🚀🚀



카테고리:

업데이트: