[Algorithm] 2차원 배열 세로 접근
업데이트:
시작하며
알고리즘 문제를 잡고 씨름을 하다가도, “맞았습니다!!” 가 나오면 지치고 힘들었던 과거를 잊게 만듭니다.
오늘은 백준 문제를 풀고 결과가 맞게 나왔는데, 아무래도 시간이 많이 걸린 것 같았습니다.
그래서 해당 문제를 푼 다른 사람들의 시간을 봤는데,
비교해보니 역시나 제 코드는 비교적 훨씬 많은 시간이 걸렸습니다.
그렇게 다른 분들의 풀이를 보며 감탄하다가, “정리해야겠다!!” 싶은 내용이 있어 글을 적습니다.
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차원 처럼 그려보면 아래와 같이 되겠죠?
그런데, 이 배열을 세로로 읽으려고 한다면, 어떻게 할 수 있을까요?
꼭 반복문을 써야할까요?
=> 파이썬을 사용하신다면, 지금부터는 그러지 않아도 됩니다!!
zip함수와 Asterisk 이용
파이썬의 내장함수인 zip함수와 Asterisk(“*”) 를 사용해봅시다. ^o^
1) zip함수
먼저 zip의 사용방법은 다음과 같습니다.
즉, 파라미터로 반복 가능한 자료형을 받아서 “묶어주는 역할을 하는 함수” 입니다.
cf) 점프 투 파이썬
2) Asterisk(*)
다음은 Asterisk(*)를 어떻게 쓰려고 하는지 확인해볼게요!
(*는 발음할 때마다 한번씩 멈칫하게 되지 않나요,, 😅 )
<사용 용도>
- 곱셈/거듭제곱 연산
- 리스트 데이터 초기화
- 가변인자
- 데이터 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)]
끝입니다. 여러분,, 😦 ,,,,
파이썬을 많이 안다고 생각했는데, 오늘도 또 배웁니다,,, 🚀🚀🚀