문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 1 < my_string의 길이 < 100
- 0 ≤ num1, num2 < my_string의 길이
- my_string은 소문자로 이루어져 있습니다.
- num1 ≠ num2
입출력 예my_stringnum1num2result
"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 z = my_string[num1]
my_string[num1] = my_string[num2]
my_string[num2] = z
return my_string
}
첫 접근은 3개의 변수 선언을 통한 두개의 변수 값 이동으로 할려고 햇는데 잘 안됨.
아래 처럼 새로운 배열을 선언해준 뒤에 문자열을 쪼개야 배열 적용이 가능한 것이었다... 문자열도 배열이지만... []을 쓸려면 split나 ...str을 사용해서 각각의 배열로 만들어 줬어야 하는 것이다.
function solution(my_string, num1, num2) {
var new_string = my_string.split('');
var temp_string = my_string[num2];
new_string[num2] = new_string[num1];
new_string[num1] = temp_string;
return new_string.join('');
}
function solution(my_string, num1, num2) {
let z = my_string[num1];
let y = my_string[num2];
return my_string.replace(my_string[num2], z).replace(my_string[num1], y)
}
"hello", 1, 2 | |
기댓값 〉 | "hlelo" |
실행 결과 〉 | 테스트를 통과하였습니다. |
테스트 2 | |
입력값 〉 | "I love you", 3, 6 |
기댓값 〉 | "I l veoyou" |
실행 결과 〉 | 실행한 결괏값 "I love you"이 기댓값 "I l veoyou"과 다릅니다. |
안된다..ㅎㅎ; ㅡㅡ> 두번째에서 안먹힌다. 왜지?
function solution(my_string, num1, num2) {
const z = my_string.slice(num1, num1 +1);
return my_string.replace(my_string[num1], my_string[num2]).replace(my_string[num2], z)
}
ㅡㅡ> 아마 replace().repalce()이런식으로 연속적용이 안되는 듯싶다. 이유는 모르겠다.
결국 답을 못 찾겠다.
slice와 splice에 대해 잘 못 이해하고 있었다.
-slice(자르고 싶은 곳 시작index, 자르고 싶은 곳 끝지점+1)
-splice(자르고 싶은 곳 시작index, 삭제할 갯수, 대체할 내용)
slice는 그저. 자른 것들만을 모아 만든 배열을 출력 (slice로 편집당한 기존 배열의 '요소'들을 출력)
splice는 아예 기존 배열의 요소를 바꾸거나, 빈 공간으로 만들어서 출력(splice로 편집된 상태의 '기존 배열'을 출력)
그리고 얘네들 문자열에서 안써짐...ㅎㅎ;
<마지막 수정 결과>
function solution(my_string, num1, num2) {
let result = [...my_string]
result.splice(num1, 1, my_string[num2])
result.splice(num2, 1, my_string[num1])
return result.join("")
}
이런식으로 새 배열인 result를 변경시키고, 값을 my_string에서 데려옴으로써 값들의 연쇄 변동이 발생되지 않음.
<보충>
구문
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
Copy to Clipboard매개변수
배열의 변경을 시작할 인덱스입니다. 배열의 길이보다 큰 값이라면 실제 시작 인덱스는 배열의 길이로 설정됩니다. 음수인 경우 배열의 끝에서부터 요소를 세어나갑니다(원점 -1, 즉 -n이면 요소 끝의 n번째 요소를 가리키며 array.length - n번째 인덱스와 같음). 값의 절대값이 배열의 길이 보다 큰 경우 0으로 설정됩니다.
deleteCount Optional배열에서 제거할 요소의 수입니다. deleteCount를 생략하거나 값이 array.length - start보다 크면 start부터의 모든 요소를 제거합니다. deleteCount가 0 이하라면 어떤 요소도 제거하지 않습니다. 이 때는 최소한 하나의 새로운 요소를 지정해야 합니다.
item1, item2, <em>...</em> Optional배열에 추가할 요소입니다. 아무 요소도 지정하지 않으면 splice()는 요소를 제거하기만 합니다.
'🗃️javascript > 프로그래머스' 카테고리의 다른 글
두 정수 사이의 합(Lv.1) (0) | 2023.01.05 |
---|---|
숫자 찾기(Lv.0)[map()의 다음함수와 연결. map()다음 if문 추가는 '||' 고려] (0) | 2023.01.05 |
피자 나눠 먹기 (2)(Lv.0)[for문, 조건문을 map과 find()로 구현] (0) | 2023.01.05 |
최댓값 만들기 (2)[이중반복문의 결과값들이 안 겹치게 사용 ] (0) | 2023.01.05 |
가장 큰 수 찾기(Lv.0)[reduce()와 Math.max()로 배열에서 가장 큰 값 찾기] (0) | 2023.01.05 |