문자열 겹쳐쓰기
문제 설명
문자열 my_string, overwrite_string과 정수 s가 주어집니다. 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.
입출력 예
my_string | overwrite_string | s | result |
"He11oWor1d" | "lloWorl" | 2 | "HelloWorld" |
"Program29b8UYP" | "merS123" | 7 | "ProgrammerS123" |
나의 1차 풀이
function solution(my_string, overwrite_string, s) {
let slice = my_string.slice(s, s + overwrite_string.length);
return my_string.replace(slice, overwrite_string);
}
테스트 케이스 딱 하나만 통과를 못했는데 예상으로는 slice가 주어진 문자열에 두 개 이상 존재해서 replace 할 때 문제가 되는 거 같다. 그래서 풀이 방법을 아예 바꿔 보기로 했다.
나의 2차 풀이
function solution(my_string, overwrite_string, s) {
return [...my_string].map((str, index) => index >= s && index <= (s + overwrite_string.length - 1) ? overwrite_string[index - s] : str).join("");
}
map 이용해서 다시 풀어봤는데 가독성이 너무 안 좋은 거 같아서 for문으로 수정했다.
나의 최종 풀이
function solution(my_string, overwrite_string, s) {
let array = [];
for (let i = 0; i <= my_string.length; i++) {
if (i >= s && i <= (s + overwrite_string.length - 1)) array.push(overwrite_string[i - s]);
else array.push(my_string[i]);
}
return array.join("");
}
for문을 이용해서 교체해야 하는 문자열의 index에서는 array에 overwrite_string을 push 하고, 그렇지 않은 경우에는 기존 my_string을 push해서 최종적으로 array를 join 하여 문자열로 출력하는 방법으로 풀었다.
다른 사람의 풀이 01
function solution(my_string, overwrite_string, s) {
return my_string.slice(0, s) + overwrite_string + my_string.slice(s + overwrite_string.length);
}
overwrite_string 앞뒤로 slice 한 my_string을 붙여주는 방법도 있었다. 이게 더 효율적인 풀이인 듯?
다른 사람의 풀이 02
function solution(my_string, overwrite_string, s) {
let result = ''
for (let i = 0; i < my_string.length; i += 1) {
if (i < s || i >= s + overwrite_string.length) {
result += my_string[i]
} else {
result += overwrite_string[i-s]
}
}
return result;
}
생각해 보니까 굳이 array를 join 할 필요 없이 바로 문자열에 더해줘도 되는 거였다 ㅎㅎ
'알고리즘 > Programmers' 카테고리의 다른 글
[TIL] 2023.06.02 Programmers_배열 만들기 3 (0) | 2023.06.02 |
---|---|
[TIL] 2023.05.31 Programmers_홀짝에 따라 다른 값 반환하기 (0) | 2023.05.31 |
[TIL] 2023.05.30 Programmers_리스트 자르기 (0) | 2023.05.30 |
[TIL] 2023.05.26 Programmers_세로 읽기 (0) | 2023.05.27 |
[TIL] 2023.05.22 Programmers_접미사인지 확인하기 (0) | 2023.05.22 |
댓글