문자열 my_string, overwrite_string과 정수 s가 주어집니다. 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.
my_string와 overwrite_string은 숫자와 알파벳으로 이루어져 있습니다.
1 ≤ overwrite_string의 길이 ≤ my_string의 길이 ≤ 1,000
0 ≤ s ≤ my_string의 길이 - overwrite_string의 길이
my_string | overwrite_string | s | result |
---|---|---|---|
"He11oWor1d" | "lloWorl" | 2 | "HelloWorld" |
"Program29b8UYP" | "merS123" | 7 | "ProgrammerS123" |
입출력 예 설명
입출력 예 #1
예제 1번의 my_string에서 인덱스 2부터 overwrite_string의 길이만큼에 해당하는 부분은 "11oWor1"이고 이를 "lloWorl"로 바꾼 "HelloWorld"를 return 합니다.
입출력 예 #2
예제 2번의 my_string에서 인덱스 7부터 overwrite_string의 길이만큼에 해당하는 부분은 "29b8UYP"이고 이를 "merS123"로 바꾼 "ProgrammerS123"를 return 합니다.
function solution(my_string, overwrite_string, s) {
let str1 = my_string.slice(0, s)
let str2 = my_string.slice(s)
let str3 = str2.slice(overwrite_string.length)
return str1 + overwrite_string + str3
}
str1
은 s번 까지의 글자 He
str2
는 s번 까지 잘린 글자 11oWor1d
str3
은 str2글자에서 overwrite_string길이 만큼 잘린 글자 d
str1 + overwrite_string + str3
는
'He' + 'lloWorl' + 'd' = 'HelloWorld'
를 출력한다.
여기서 좀 더 간단하게 작성할 수 있었다.
function solution(my_string, overwrite_string, s) {
let str1 = my_string.slice(0, s)
let str2 = my_string.slice(s + overwrite_string.length)
return str1 + overwrite_string + str2
}
my_string.slice(s + overwrite_string.length)
를 해주면
뒤에 남은 문자열을 반환한다.
이렇게 한 줄을 줄일 수 있다.
원래는 for문으로 해볼까? 했지만 최대한 메서드를 많이 사용하고자 다른 여러 방법을 고민하다
slice를 선택했다.(배열 등으로 시도해 봤지만 실패...)
function solution(my_string, overwrite_string, s) {
return my_string.slice(0,s)+overwrite_string+my_string.slice(s+overwrite_string.length);
}
변수에 저장하고 했던 방법을 한 줄로 넣은 분도 있다.
내가 작성한 것과 동일한 방법이지만 변수에 저장을 했는지 않했는지 차이인 거 같다.
개인 적인 생각으로 가독성이 떨어져
변수로 정리하는 방법이 더 좋다고 생각한다.
나중에 다른 개발자가 봤을 때 보기 편할 거 같다.
그래도 어쩌면 코딩 테스트는 문제 해결 능력을 보는 것이기에 그 부분이 중요하지 않다 생각할 수도 있을 거 같다.
function solution(my_string, overwrite_string, s) {
let a = my_string.split('');
a.splice(s, overwrite_string.length, ...overwrite_string);
return a.join('');
}
나도 배열로 변경하고 splice메서드를 이용해 해볼까? 했었는데
생각보다 쉽지가 않아 다른 방법으로 통과했던거 같다.
이분 코드를 보고 어떤식으로 작업하는지 분석해 봐도 괜찮다 생각한다.
function solution(my_string, overwrite_string, s) {
var answer = '';
answer += my_string.substr(0,s);
answer += overwrite_string;
answer += my_string.substr(overwrite_string.length+s,my_string.length)
return answer;
}
이분은 나 처럼 변수 선언해 하나로 더해준게 아닌
하나씩 기존 값에서 더해주는 작업을 하셨다.
또한 slice메서드가 아닌 substr메서드를 사용하셨다.
substr은 문자열 자를 때 사용한다. 사용법은 slice와 비슷한 거 같다.
여러가지 코드를 보면 이분은 이런 방식으로 하셨구나 등 생각을하게 된다.
생각했던 방법이 생각대로 되지 않아 다른 방법으로 통과를 했다.
이분은 내가 생각했던 방법을 성공 시켰구나 생각도 든다.
그러면서 어떤식으로 코드를 작성하신거지? 하면서
이 코드는 한 번 확인해 봐도 괜찮겠다 싶은걸 몇 개 가져와 봤다.