문자열 겹쳐쓰기
문제 설명
문자열 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 합니다.
설계
- i = 0부터 my_string 길이까지 반복
- 만약 s 길이와 i가 같으면 my_string을 s 길이만큼 앞을 자름 → substring() 메서드
- 자른 my_string에 overwrite_string을 이어붙임 → concat() 메서드
3-1. 디버깅) 첫번째 입출력 예1 HelloWorld에서 'd'가 출력되지 않음 → split 후 길이가 누락됨을 확인
두번째 입출력 예2는 통과 - overwrite_string의 길이와 s길이를 합하여 substring 후 이어붙임 → substring() 메서드, concat() 메서드
4-1. 2시간동안 생각하여 겨우 풀었음;;ㅠ
코드
class Solution {
public String solution(String my_string, String overwrite_string, int s) {
String answer = "";
if((overwrite_string.length() >= 1 && overwrite_string.length() <= 1000) && (my_string.length() >= 1 && my_string.length() <= 1000)){
// my_string을 s만큼 split
String spltStr = my_string.substring(0, s);
// overwrite_string으로 concat
String cnctStr = spltStr.concat(overwrite_string);
// my_string의 남은 문자열
String leftStr = my_string.substring(s + overwrite_string.length());
answer = cnctStr.concat(leftStr);
}
return answer;
}
}
리팩토링 후 코드
class Solution {
public String solution(String my_string, String overwrite_string, int s) {
String answer = "";
if((overwrite_string.length() >= 1 && overwrite_string.length() <= 1000) && (my_string.length() >= 1 && my_string.length() <= 1000)){
answer = my_string.substring(0, s) // my_string을 s만큼 split
.concat(overwrite_string) // // overwrite_string으로 concat
.concat(my_string.substring(s + overwrite_string.length())); // my_string의 남은 문자열 concat
}
return answer;
}
}