파이썬에서 1차원 리스트을 슬라이싱하는건 간단합니다.
arr = "ABCDE"
arr[0:3] = "ABC"
하지만 리스트가 2차원 이라면?
꽤나 골치아파지죠.
numpy를 이용하면 되지만, numpy가 익숙하지 않은 저로서는
그냥 파이썬 문법을 이용합니다!
2차원 배열 Slicing
2차원 배열 을 순회하면서 특정 2차원 배열만 빼내어 보고싶을 때!
어떻게 해야할까요?
예시를 드릴테니 한번 맞춰보세요 !
5 * 5 크기의 OX 판이 있습니다.
[
"OXOOO",
"XOXXO",
"OOXOO",
"XOOOX",
"OXOXO",
]
이 맵의 일부분이 3 * 3 인 다음과 같은판과 일치하는지 확인하고 싶습니다.
[
"OXO",
"XOX",
"OXO",
]
어떻게 하면 좋을까요?
답은 좀 더 보기 편한 리스트로 해보죠!
다음과 같이 각 행과 열을 나타내는 튜플로 이루어진 2차원 리스트가 있습니다.
field = [
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)],
[(1, 0), (1, 1), (1, 2), (1, 3), (1, 4)],
[(2, 0), (2, 1), (2, 2), (2, 3), (2, 4)],
[(3, 0), (3, 1), (3, 2), (3, 3), (3, 4)],
[(4, 0), (4, 1), (4, 2), (4, 3), (4, 4)],
]
여기서 2*3 만큼을 계속 추출해보겠습니다.
결국 핵심은
✨ [row[j:j+m] for row in field[i:i+n]] ✨
입니다.
field 에서 i ~ i+n 만큼의 row 들을 Slicing한 후,
Slicing 된 row들을 j ~ j+m 만큼 Slicing하여 다시 2차원 List 로 만들어 줍니다.
코딩테스트 특성상 문자열 배열, 2차원 배열을 다룰 일이 많다보니, 다음과 같은 방식이 자주 사용됩니다.
Python 으로 코딩테스트를 준비하시는 분은 알아두시면 유용할 것 같네요! 😁
앞서 제시했던 예제는 문자열 배열이지만, 문자열도 슬라이싱이 되니, 똑같은 방법으로 해결이 가능합니다.
꼭 스스로 해보시면서 실력 향상시키시길!!
'기타 언어 > Python' 카테고리의 다른 글
[Python] bisect 사용법👀 / 이분탐색 / 코딩테스트 (0) | 2020.10.03 |
---|---|
[Python] 파이썬 Queue와 deque 속도 / (0) | 2020.09.01 |
[Python] 파이썬 Heapq 모듈 사용하기 / 힙(Heap) 구조 (0) | 2019.12.11 |
[Python] 파이썬 유용한 함수들 1탄 / 코딩 테스트에 유용한 함수들 (0) | 2019.11.13 |
[파이썬] from import / 모듈 가져오기 (0) | 2019.11.09 |
댓글