인덱스 바꾸기
2024. 9. 10. 18:00ㆍ코딩테스트 입문
https://school.programmers.co.kr/learn/courses/30/lessons/120895
문제 설명
문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 1 < my_string의 길이 < 100
- 0 ≤ num1, num2 < my_string의 길이
- my_string은 소문자로 이루어져 있습니다.
- num1 ≠ num2
입출력 예
my_string | num1 | num2 | result |
"hello" | 1 | 2 | "hlelo" |
"I love you" | 3 | 6 | "I l veoyou" |
입출력 예 설명
입출력 예 #1
- "hello"의 1번째 인덱스인 "e"와 2번째 인덱스인 "l"을 바꾸면 "hlelo"입니다.
입출력 예 #2
- "I love you"의 3번째 인덱스 "o"와 " "(공백)을 바꾸면 "I l veoyou"입니다.
문자열 my_string과 인덱스 num1, num2가 주어졌을 때, num1과 num2 인덱스에 위치한 문자들을 서로 바꾸는 문제입니다.
문자열은 인덱싱을 적용할 수 없는 자료형이기 때문에, 이 둘을 바꾸기 위해서는 리스트로 변환할 필요가 있습니다.
리스트로 변환한 뒤에는 서로의 값을 swap해주면 됩니다.
파이썬으로 문제를 풀어보겠습니다.
def solution(my_string, num1, num2):
# 문자열의 요소를 하나씩 잘라 리스트로 저장합니다.
answer = [s for s in my_string]
# 리스트의 요소들을 swap합니다.
answer[num1], answer[num2] = answer[num2], answer[num1]
# 리스트를 join을 사용하여 공백 없이 붙입니다.
return ''.join(answer)
보통 swap을 한다고 하면 temp을 설정해서 사용하는 방법이 기본적입니다만, 파이썬은 a, b = b, a라고 쓰더라도 swap이 가능합니다.
물론 내부적으로는 temp을 사용하는 형태기는 하지만, 명시해주지 않아도 된다는 장점이 있죠.
swap을 한 다음에는 join 함수로 문자열로 다시 변환해주면 됩니다.
문자열에는 인덱싱이 불가능함을 알면 간단하게 풀 수 있습니다.