2022. 11. 15. 17:42ㆍProgramming/Python
프로그래머스 코딩 문제들을 푸는데 아무래도 인덱싱 / 슬라이싱에 대해 좀 부족한 것 같아 정리를 시작하게 되었다
문자열
문자열 = 따옴표로 둘러싸여진 문자의 집합. 숫자의 경우여도 따옴표로 둘러싸여 있으면 문자 취급을 한다
"abcd efgh 123456"
"123456"
"가나다"
문자열 인덱싱과 슬라이싱은 이러한 문자열을 가지고 문제 풀이를 쉽게 접근할 수 있도록 해주는 방법이다.
문자열을 만드는 방법은 4가지가 존재한다.
- 큰따옴표 " "로 둘러싸기
- 작은따옴표 ' '로 둘러싸기
- 큰따옴표 3개를 연속으로 """ """ 둘러싸기
- 작은따옴표 3개를 연속으로 ''' ''' 둘러싸기
해당 방법들을 사용해서 문자열을 만들 수 있다.
문자열 인덱싱
그럼 문자열 인덱싱이란 무엇인가? index는 색인이다. 그래서 데이터를 좀 더 빠르게 접근할 수 있게 도와주는 역할을 한다. 파이썬의 경우 문자열 자체에 색인이 존재하여 따로 리스트로 만들어서 접근하지 않아도 문자열 자체를 바로 for 반복문을 통한 풀이가 가능하다..
a = "123456789 abcdefg"
a[0] = 1
a[10] = " "
a[11] = a
각 문자마다 인덱스가 붙으면 인덱스의 시작은 0과 같다.
a[-1]=g
또한 -1같은 음수를 사용하여 문자를 하나하나 세어서 접근하는 게 아닌 뒤에서 바로 접근하는 것도 가능하다.
해당 코드는 문제에서 문자열을 주었고, 그 문자열 자체 기능을 이용해서 한 풀이이다.
def solution(my_string):
answer = ''
for i in my_string:
if i.isupper():
answer+=(i.lower())
else:
answer+=(i.upper())
return answer
문자열 길이로 접근을 하였고 따로 배열이나 리스트를 사용해서 풀이를 진행하지 않았다.
문자열 슬라이싱
인덱스를 사용하여 본인이 필요한 부분만큼만 문자열을 가져오는 것이다. 슬라이싱의 경우 카카오 코딩 테스트의 기출문제 중에 사용하는 문제가 나왔는데 슬라이싱에 대해 기본만 알고 있다가 이번에는 적용하지 못해서 풀지 못했었다.
# 이때 인덱싱 / 슬라이싱 기법은 리스트와 튜플에서도 활용이 가능
a = "123456789 abcdefg"
# 형태
a[시작 번호:끝 번호] → 끝 번호에 해당하는 인덱스는 포함되지않는다
# 기본적인 문자열 슬라이싱
a[0:9] → '123456789'
# 처음부터 진행하는 슬라이싱의 경우 시작 번호 생략 가능
a[:9] → '123456789'
# 시작번호가 0이 아닌 경우
a[1:9] → "23456789"
# 끝번로 생략시
a[0:] → "123456789 abcdefg"
# 시작 / 끝 생략
a[:] = "123456789 abcdefg"
# 슬라이싱으로 문자열 나누기
a1 = a[:9] → "123456789"
a2 = a[9:] → " abcdefg"
중복된 문자열을 압축하는 문제였다. 해당 문제의 경우 주어진 문자열을 for 반복문과 문자열 슬라이싱을 통해 문자열을 앞에서부터 하나하나 슬라이싱 한 후 리스트로 저장을 하는 과정이었다. 문자열 인덱싱의 경우 활용을 할 수 있었다. 그러나 슬라이싱의 경우 사용한 적이 없기에 문제 풀이과정에서 이 슬라이싱을 하고 리스트로 저장하는 과정을 해내지 못해 풀지 못하였다. 다음에 슬라이싱을 사용하는 문제가 보인다면 그때는 한번 슬라이싱을 사용해보려고 한다.
# 주어진 string의 길이만큼 for 반복문 실행
for split_size in range(len(string)):
# spllited 리스트는 다음과 같다
# string의 슬라이싱을 시작
# 슬라이싱의 경우 i:i + split_size까지 슬라이싱
# 이때 i의 경우 for 반복문을 통해 진행
# for 반복문 안의 step이 split_size로 지정이 되어 슬라이싱 시작범위 조절
splited = [string[i:i + split_size] for i in range(0, n, split_size)]
'Programming > Python' 카테고리의 다른 글
[Python] n진법 변환 (0) | 2022.11.24 |
---|---|
[Python] sort & sorted (0) | 2022.11.16 |
[Python] 파이썬 with이란? (0) | 2022.09.12 |
[Python] 알고리즘 - 파이썬 (0) | 2022.07.02 |
[Python] sys.stdin.readline() vs input() (0) | 2022.03.23 |