728x90
https://school.programmers.co.kr/learn/courses/30/lessons/181904
내 코드
def solution(my_string, m, c):
answer = ''
for i in range(int(len(my_string)/m)):
answer += my_string[c-1+(m*i)]
i+=1
return answer
풀면서도 이건 아닌 것 같다는 생각이 많이 들었던 문제였다.
문자열 출력에 집중한게 아니라 행과 열에 집중했기 때문인 것 같다.
뭔가 더 쉬운 방법이 있는 것 같은데, 괜히 복잡하게 꼬아서 풀고 있다는 생각이 계속 들었다.
풀긴 풀었지만, 역시나 훨씬 쉬운 방법이 있었다.
다른 사람 풀이
def solution(my_string, m, c):
return my_string[c-1::m]
궁극적으로 문제에서 원하는 바는, 행과 열을 신경쓰는게 아니라
일정한 비율로 건너뛰어 하나의 문자열을 만드는 것이다!
여기서 사용하는 개념이 바로 문자열 슬라이싱이다.
my_string[c-1::m]은 Python에서 슬라이싱을 사용하는 표현이다.
c는 시작 인덱스, m은 스텝(간격)을 나타낸다.
- c-1: 시작 인덱스를 c-1로 지정한다. Python에서 인덱스는 0부터 시작하므로 c-1은 실제로 시작 인덱스이다.
- ::m: 스텝(간격)을 m으로 지정한다. 이는 매 m번째 항목을 선택한다는 의미이다.
따라서 my_string [c-1::m]은 s 시퀀스에서 시작 인덱스 c-1에서부터 매 m번째 항목을 선택하는 것을 나타낸다.
좀 더 쉽게 풀어쓰면 밑과 같은데,
def solution(my_string, m, c):
answer = ''
for i in range(c-1,len(my_string),m): answer+=my_string[i]
return answer
이는 c-1부터 전체 my_string을 m 간격으로 순회하며,
그 값을 answer에 넣는다는 의미이다.
문자열 슬라이싱은 자주 나오는 개념이지만, 많이 헷갈리는 것 같다.
화이팅 끄읏-!
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 1 [PCCE 기출문제] 10번 / 데이터 분석 (1) | 2024.01.26 |
---|---|
[프로그래머스][PYTHON] Lv. 1 최소직사각형 (1) | 2024.01.26 |
[프로그래머스][PYTHON] Lv. 0 문자열 여러 번 뒤집기 (1) | 2023.12.29 |
[프로그래머스][PYTHON] Lv. 0 배열 만들기 2 (1) | 2023.12.28 |
[프로그래머스][PYTHON] Lv. 0 수열과 구간 쿼리 4 (0) | 2023.12.27 |