[프로그래머스-기초] 문자열 겹쳐쓰기

JiEun·2023년 5월 14일
0

코테/코플릿

목록 보기
13/56
post-thumbnail

문자열 겹쳐쓰기

문제 설명

문자열 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_stringoverwrite_stringsresult
"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);
}

변수에 저장하고 했던 방법을 한 줄로 넣은 분도 있다.
내가 작성한 것과 동일한 방법이지만 변수에 저장을 했는지 않했는지 차이인 거 같다.

개인 적인 생각으로 가독성이 떨어져
변수로 정리하는 방법이 더 좋다고 생각한다.

나중에 다른 개발자가 봤을 때 보기 편할 거 같다.

그래도 어쩌면 코딩 테스트는 문제 해결 능력을 보는 것이기에 그 부분이 중요하지 않다 생각할 수도 있을 거 같다.

💻 배열로 만들어 splice메서드로 overwrite_string길이 만큼 내용 덮어씌우기

function solution(my_string, overwrite_string, s) {
    let a = my_string.split('');
    a.splice(s, overwrite_string.length, ...overwrite_string);
    return a.join('');
}

나도 배열로 변경하고 splice메서드를 이용해 해볼까? 했었는데
생각보다 쉽지가 않아 다른 방법으로 통과했던거 같다.

이분 코드를 보고 어떤식으로 작업하는지 분석해 봐도 괜찮다 생각한다.

💻 slice가 아닌 substr메서드 사용해 문자열 자르기

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와 비슷한 거 같다.


✏️ 마치며

여러가지 코드를 보면 이분은 이런 방식으로 하셨구나 등 생각을하게 된다.

생각했던 방법이 생각대로 되지 않아 다른 방법으로 통과를 했다.
이분은 내가 생각했던 방법을 성공 시켰구나 생각도 든다.

그러면서 어떤식으로 코드를 작성하신거지? 하면서
이 코드는 한 번 확인해 봐도 괜찮겠다 싶은걸 몇 개 가져와 봤다.

profile
💻 프론트엔드를 목표로 성장 중! (알아봤던 내용 등을 정리하기)

0개의 댓글