인덱스 바꾸기
문제 설명
문자열 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"입니다.
나의 풀이
function solution(my_string, num1, num2) {
let arr = my_string.split('')
let num1Str = arr[num1]
arr[num1] = arr[num2]
arr[num2] = num1Str
let answer = arr.join('')
return answer;
}
풀이 설명
- 인덱스로 접근해 값을 교환하기 위해
my_string을 배열로 변환하고, 변수 num1Str을 선언해 교환해야 하는 값 중 하나를 저장하여 값 교환에 활용하는 방법
- 두 개의 값을 서로 교환할 때 사용하는 지극히 일반적인 방법이다.
구조 분해 할당을 이용한 풀이
function solution(my_string, num1, num2) {
let arr = my_string.split('');
[arr[num1], arr[num2]] = [arr[num2], arr[num1]];
let answer = arr.join('');
return answer;
}
풀이 설명
- 두 개의 값을 서로 교환할 때 구조분해 할당을 활용할 수 있었다!
- 구조 분해 할당을 간단히 설명하면 인덱스가 아닌 변수 즉, 다른 이름으로 배열의 요소에 접근할 수 있게 해주는 것이다.
let arr = ["one", "two"];
let [first, second] = arr;
// first = "one", second = "two"
- 이를 변수들에 저장된 값들을 서로 교환할 때 사용할 수 있다.
let first = "one";
let second = "two";
[first, second] = [second, first];
// first = "two", second = "one"
- 내 추측으로는
[first, second] = [second, first];이 first = second; second = first와 같이 작동하지 않을까 생각한다.
- 즉, first라는 이름으로 second의 요소를 접근할 수 있고, second라는 이름으로 first의 요소를 접근할 수 있는 것.
- 이는 결국 값을 교환하는 효과로 나타난 것 아닐까... 자세한 것은 더 알아봐야 할 것 같다😓
- 아무튼 이는 배열의 요소끼리도 응용할 수 있었고, 서로 값을 교환할 때 구조 분해 할당을 사용하면 무척 편할 것 같다.