JavaScript/알고리즘

프로그래머스 문자열 뒤집기 JS ( 문자열의 특정부분만 변경 / slice()의 범위 )

hihiha2 2023. 6. 22. 00:15

문제 설명

문자열 my_string과 정수 se가 매개변수로 주어질 때, my_string에서 인덱스 s부터 인덱스 e까지를 뒤집은 문자열을 return 하는 solution 함수를 작성해 주세요.

 

 

 

🙋‍♀️ 내 생각

문자열의 인덱스를 이용해서 중간의 일부만 변경하는 문제이다.

인덱스를 어디부터 어디까지 자를지를 정해서 자르기 위해서 slice()를 이용해야겠다고 생각했다.

그리고 변경하는 값이 중간에 위치하기때문에 결국에 문자열은 크게는 3조각으로 나뉠것이기 때문에 string1,2,3로 3개의 변수를 만들어서 잘라진 값들을 담아서 문제를 풀었다. 

 

 

 

 

✅ 내 코드

function solution(my_string,s,e){
    let string1=''
    let string2=''
    let string3=''
    
    string1= my_string.slice(0,s)
    string2= my_string.slice(s,e+1).split('').reverse().join('')
    string3= my_string.slice(e+1,my_string.length)
    
    return string1+string2+string3
}

my_string을 처음값, 중간값(거꾸로 뒤집어줄 값), 마지막값 이렇게 크게 3개로 자른다.

그래서 각각 다른 string1, string2, string3라는 변수를 만들어서 각각 담는다.

 

그리고 slice()를 통해서 각각의 변수에 담아줄 문자열을 인덱스를 통해서 지정한다.

slice(begin,end)로 나타내는데 여기서 주의할 점은 end는 미포함한다는 것이다.

이 점에 주의하면서 slice로 각각 자를 인덱스를 적는다.

 

먼저 string1을 보면 0부터 s-1번째 인덱스까지 담아야하므로 slice(0,s)

string2는 s부터 시작해서 e까지 담아야하므로 slice(s,e+1)

string3은 e+1부터 마지막값까지 담아야하므로 slice(e+1, my_string.length) 가 된다.

 

그런 다음, 중간값 string2는 값을 뒤집어야하기때문에 reverse()를 써야하는데 reverse는 배열에만 쓸 수 있다.

그래서 string2를 개별적인 값들로 배열로 담기게 만들기위해서 split('')을 한다.

그리고 reverse()를 통해 값을 뒤집는다.

이제 다시 값을 하나의 문자열로 바꾸기 위해서 join('')을 해준다.

 

이렇게 만들어진 string1+string2+string3를 더한다.

 

 

 

💻  다른사람 코드중에 배울 것 

function solution(my_string, s, e) {
    var answer = '';
    var str = my_string.substring(s,e+1);
    var newStr = str.split('').reverse().join('');

    answer = my_string.replace(str,newStr);
    return answer;
}

문제를 보자마자 생각난 메스드는 replace()였다.

그런데 저 가운데의 값만을 replace()하는 방법이 생각나지 않아 위와 같은 방식으로 풀었는데, replace()를 통해서 푼 코드가 있어서 공부해보았다.

 

먼저 answer로 변수를 선언하고 초기값을 ''로 할당한다.

str이라는 변수에 substring()을 이용해서 문자열의 s부터 e까지의 값을 담는다. (중간값)

newStr이라는 변수에는 위에 만들어둔 중간값을 대체할 뒤집힌 문자열을 담는다.

 

마지막으로 my_string문자열에 replace()를 이용해서 중간값 ➡️ new중간값 으로 대체한다.

 

내가 생각하지 못했던 부분은 replace()의 첫번째인자로 중간값을 범위로 지정하여 넣어주는 부분이었다.

일정부분을 인덱스를 통해서 범위를 지정해서 replace()에서 대체될 값으로 넣어주는 것도 알아두어야겠다.