이 문제를 풀다가 배열을 reverse하는 과정에서 오류
를 겪어서 글을 남겨본다.
일단 겪은 오류는 아래와 같다.
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]
를 이용하여 역순회를 하면 간단했다....
역시 다른 사람 코드를 보고 배우는 것이 많다.
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("");
}
나의 코드 스타일도 있지만 같은 고민을 다른 관점에서 생각하여 푸는 것에서 새로운 방법을 제공받게 된다. 쉬운 문제는 꼭 다른사람풀이를 안 보고 넘어가는 습관이 있는데 이를 좀 고치고 다른 사람 풀이도 보는 습관을 들여야겠다...🥲