[JavaScript] 문자열 겹쳐쓰기

Yeojin·2024년 2월 14일
post-thumbnail

코딩테스트 연습 > 코딩 기초 트레이닝

✅ 문제 설명

문자열 my_string, overwrite_string과 정수 s가 주어집니다. 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.


✅ 제한사항

  • my_stringoverwrite_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"

✅ 풀이

내가 작성한 코드는 채점 시 테스트 6번에서 지속적으로 실패가 나타났다. 찾아보니, my_string에 같은 단어가 여러번 나올 경우 replace로 처리했을 때 원하지 않는 부분까지 바뀌게 되기 때문이라고 한다.

  • 반례
    입력값 〉 "aaaaaa", "bbb", 3
    기댓값 〉 "aaabbb"

위와 같은 반례에서 replace를 사용 시, 기댓값을 만족하지 못하고 "bbbbbb"가 출력될 것이다.


// 나의 풀이
const solution = (my_string, overwrite_string, s) => {
    let answer = '';
    let replace_string = '';
    let length = overwrite_string.length;
    
    replace_string = my_string.substr(s, length);
    answer = my_string.replace(replace_string, overwrite_string);
    
    return answer;
}


// 다른 사람의 풀이 참고
const solution = (my_string, overwrite_string, s) => {
    
    let front_string = my_string.slice(0, s);
    let back_string = my_string.slice(s + overwrite_string.length);
    
    return front_string + overwrite_string + back_string;
}

slice("시작 위치", "종료 위치") 또는 slice("시작 위치")
slice() 함수는 기본적인 사용법은 substring() 함수와 동일하며, 다른 점은 음수(-)를 자유롭게 사용할 수 있어서 뒤에서부터 문자열을 자를 때 유용하게 사용할 수 있다.

profile
"Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better."

0개의 댓글