코딩테스트/프로그래머스

[코딩테스트 입문] Day 15 인덱스 바꾸기 (JavaScript)

Kim Minki 2023. 1. 25. 16:44

인덱스 바꾸기

문제 설명

문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 1 < my_string의 길이 < 100
  • 0 ≤ num1, num2 < my_string의 길이
  • my_string은 소문자로 이루어져 있습니다.
  • num1num2

입출력 예

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의 요소를 접근할 수 있는 것.
  • 이는 결국 값을 교환하는 효과로 나타난 것 아닐까... 자세한 것은 더 알아봐야 할 것 같다😓
  • 아무튼 이는 배열의 요소끼리도 응용할 수 있었고, 서로 값을 교환할 때 구조 분해 할당을 사용하면 무척 편할 것 같다.