[프로그래머스][LV.0] 문자열 여러 번 뒤집기 | python3
2025. 2. 3. 19:57ㆍ프로그래머스/LV.0
문제 링크: 문자열 여러 번 뒤집기
문제 설명
문제 설명
문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_string에 queries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- my_string은 영소문자로만 이루어져 있습니다.
- 1 ≤ my_string의 길이 ≤ 1,000
- queries의 원소는 [s, e]의 형태로 0 ≤ s ≤ e < my_string의 길이를 만족합니다.
- 1 ≤ queries의 길이 ≤ 1,000
문제 풀이
문제에서 하라는 대로 인덱싱을 활용하여 나누어서 붙였다.
다만 s가 0일때와 e+1부터 시작하는데 이게 문자열의 인덱스를 넘어갈 경우를 잘 나누어서 생각했다. 지금도 살짝 머리아픔....하고 계속 코드를 봤는데 if e-1==len(my_string): 이 부분의 코드가 도저히 이해가 안됐다...
gpt한테 물어보니 틀렸다는데 흠....그럼 대체 저게 왜 통과가 된거냐??? 일단 질문하는 곳에 물어는 봄...
🔍 코드 분석
이 코드는 queries에 있는 (s, e) 범위를 반복적으로 뒤집어서 my_string을 계속 변경하는 역할을 합니다.하지만 잘못된 부분이 있어서 틀린 결과가 나올 가능성이 큽니다.
문제점 1️⃣: if s != 0: 조건
if s != 0: answer += my_string[e:s-1:-1] else: answer += my_string[e::-1]
이 부분은 (s, e) 범위를 뒤집을 때 사용됩니다.문제는 my_string[e:s-1:-1]의 사용 방식이 잘못되었다는 점입니다.슬라이싱을 활용한 [::-1]은 보통 앞에서 뒤로 가는 방식과 뒤에서 앞으로 가는 방식을 신경 써야 하는데,e:s-1:-1이 올바르게 동작하지 않을 수도 있습니다.
✅ 해결 방법:👉 그냥 일반적인 슬라이싱과 [::-1]을 활용하는 방식이 더 안정적입니다.
python복사편집answer += my_string[s:e+1][::-1] # 이렇게 변경!
문제점 2️⃣: if e == len(my_string) - 1: 조건
if e == len(my_string) - 1: continue else: answer += my_string[e+1:]
if e == len(my_string) - 1: 이 조건을 넣었지만,continue를 하면 반복문의 다음 루프로 넘어가므로 my_string이 갱신되지 않음.즉, my_string = answer가 실행되지 않음!
✅ 해결 방법:👉 continue를 없애고, 그냥 answer을 끝까지 이어 붙이는 방식으로 변경해야 합니다.
🔧 수정된 코드
이제 문제점을 해결한 코드로 수정해볼게요.
def solution(my_string, queries): for s, e in queries: # 앞부분 유지 answer = my_string[:s] # (s, e) 범위를 뒤집어서 추가 answer += my_string[s:e+1][::-1] # 뒷부분 추가 answer += my_string[e+1:] # 문자열 업데이트 my_string = answer return my_string
내코드
def solution(my_string, queries):
for s,e in queries:
answer = ''
answer+=my_string[:s]
if s!=0:
answer+=my_string[e:s-1:-1]
else:
answer+=my_string[e::-1]
if e-1==len(my_string):
continue
else:
answer+=my_string[e+1:]
my_string=answer
return answer
더보기
다른사람풀이
def solution(my_string, queries):
for s,e in queries:
answer = ''
answer+=my_string[:s]
if s!=0:
answer+=my_string[e:s-1:-1]
else:
answer+=my_string[e:s:-1]
answer+=my_string[e:]
print(answer)
my_string=answer
return answer
내 코드와 비교했을때 비슷한 듯 하면서 이 코드가 훨씬 직관적이고 간결하다고 느낀다.
[::-1]이 올 때 너무 헷갈린다. 이 부분은 주피터로 이것저것해보면서 익숙해져야할수밖에 없을듯
def solution(my_string, queries):
answer=list(my_string)
for s,e in queries:
answer[s:e+1]=answer[s:e+1][::-1]
return ''.join(answer)
리스트로 만들어서 저렇게 사용할 수 있을줄은 몰랐다....
def solution(my_string, queries):
for (s, e) in queries:
my_string = my_string[:s] + my_string[s:e+1][::-1] + my_string[e+1:]
return my_string
간결하게 잘 쓴거 같아서 가지고 옴
'프로그래머스 > LV.0' 카테고리의 다른 글
[프로그래머스][LV.0] 유한소수 판별하기 | python3 (0) | 2025.02.10 |
---|---|
[프로그래머스][LV.0] 최빈값 구하기 | python3 (0) | 2025.02.10 |
[프로그래머스][LV.0] 주사위 게임 3 | python3 (0) | 2025.02.03 |
[프로그래머스][LV.0] 배열 만들기 2 | python3 (0) | 2025.02.03 |
[프로그래머스][LV.0] 숫자 비교하기 | python3 (0) | 2025.01.14 |