파이썬 Extended Slices
파이썬에서 만약 배열 원소들을 역순으로 나열해서 작성해야하는 문제가 있다고 가정하자. 필자는 이와같은 문제를 풀다가 Extended Slice라는 기본 개념을 놓쳤기에 이 포스팅을 통해 바로 잡고 가려고한다. 형태는 다음과 같다.
ARR[q:w:e] : index q부터 index w 까지 e간격으로 만들겠다
이러한 형태를 띄고 있는것이 Extended Slice라고 한다. 이를 직접적으로 연계시켜 생각할수 있는 문제는 밑에 링크를 참조하자.
https://www.acmicpc.net/problem/2908
2908번: 상수
문제 상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다. 상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734과 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할
www.acmicpc.net
문제를 읽어보면 여기서 상수라는 사람은 입력된 값을 거꾸로 읽고 그 거꾸로 읽은 값들중 가장 큰 값을 출력한다고 문제에 주어져 있다.이를 Extended Slice를 이용해서 간단하게 코드를 작성하면 다음과 같이 작성할 수 있다.
1
2
3
4
|
a = input().split(' ')
for c in range(0, len(a)):
a[c] = int(a[c][::-1])
print(max(a))
|
cs |
정말 간단하게 나오는것을 볼 수 있다. 여기서 Extended Slice개념은 3번째 줄에 보면 나오게 된다. 우선 이 코드의 전개를 하나씩 풀어보자
1 . 입력된 수를 Blank를 기준으로 split해서 리스트로 만들고 a에 대입한다.
2 . 리스트 a에 들은 각각의 인자들을 역순으로 만든후 정수형 변환하고 그 인자의 자리에 다시 대입해 준다.
3 . 리스트에서 가장 큰 값을 출력한다.
몇가지 예시를 들면
코드에서 작성된 arr[::-1](여기서 a[c]는 string형 문자열이 되므로-문자열도 배열로 취급할 수 있습니다) 같은 경우에는 역순으로 만들겠다는 이야기가 된다. 다른 경우는 밑의 사진을 참고하자.