PROGRAMMERS - 문자열 여러 번 뒤집기 [기초트레이닝]

GI JUNG·2023년 7월 2일
1

algorithm

목록 보기
11/28
post-thumbnail

🍀 문자열 여러 번 뒤집기

문제를 풀다가 배열을 reverse하는 과정에서 오류를 겪어서 글을 남겨본다.

1️⃣ Python

일단 겪은 오류는 아래와 같다.

arr = [1, 2, 3]
print(arr[-1:-1:-1]) # 👉🏻 [] 빈 배열 출력

0번째 index까지 reverse를 해야하는 상황이므로 -1로 해주면 0번 째 index까지 slicing하지 않을까 싶었지만 빈 배열이 나온다. 계속 찾아보다가 chatGPT에서 답을 얻을 수 있었는데 for 구문을 돌면서 index에 접근할 수 없으면 빈 배열이 나온다고는 하는데 chatGPT가 모두 맞는 것은 아니여서 일단 안 되는구나 정도로만 생각했다.
이 문제는 None을 이용하여 해결했다. None은 python에서 default value로 취급되기 때문에 None을 이용했다.

# 기존 버그난 코드
def solution(my_string, queries):
    answer = list(my_string)
    
    for start, end in queries:
        answer[start: end + 1] = answer[end: start - 1: -1]

    return ''.join(answer)

start = 0일 때 -1이 되므로 빈 배열이 출력되므로 문제를 풀 수 없게 된다.

# 버그를 고친 코드
...//
answer[start: end + 1] = answer[end: start - 1 if start != 0 else None: -1]

...//

start가 0일 시 slice 두 번째 인자는 -1이 들어가므로 이러한 경우에는 None으로 처리했다.
하지만 다른 사람의 풀이를 보고 위와 같이할 수도 있지만 아래와 같이 할 수도 있다.

# 다른 사람 코드를 보고 배운 코드
...//
answer[start: end + 1] = answer[start: end + 1][::-1]
...//

먼저 원하는만큼 구해오고 [::-1]를 이용하여 역순회를 하면 간단했다....
역시 다른 사람 코드를 보고 배우는 것이 많다.

2️⃣ Javascript

javascript는 python과 같이 slicing에 할당을 못하므로 splice를 사용하여 풀 수 있다. 근데, 항상 splice가 헷갈렸는데 이번 기회로 제대로 알게 되었다.

💡 splice 사용법
splice(index, index로 부터 지울 개수[, 바꿀 값][, 바꿀 값][, 바꿀 값])
⭐️ 주의할 점은 바꿀 값을 iterable object로 넣어주는 것이 아니라 spread로 풀어서 넣어주어야한다. 아래 ⭐️참고

function solution(my_string, queries) {
    const answer = [...my_string];
    
    for (const [start, end] of queries){
        answer.splice(
          start, 
          end - start + 1, 
          ...answer.slice(start, end + 1).reverse()) // ⭐️
    }
    
    return answer.join("");
}

🚀 마치며

나의 코드 스타일도 있지만 같은 고민을 다른 관점에서 생각하여 푸는 것에서 새로운 방법을 제공받게 된다. 쉬운 문제는 꼭 다른사람풀이를 안 보고 넘어가는 습관이 있는데 이를 좀 고치고 다른 사람 풀이도 보는 습관을 들여야겠다...🥲

profile
step by step

0개의 댓글