문자열 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의 길이
입출력 예
입출력 예 #1
예제 1번의 my_string에서 인덱스 2부터 overwrite_string의 길이만큼에 해당하는 부분은 "11oWor1"이고 이를 "lloWorl"로 바꾼 "HelloWorld"를 return 합니다.
입출력 예 #2
예제 2번의 my_string에서 인덱스 7부터 overwrite_string의 길이만큼에 해당하는 부분은 "29b8UYP"이고 이를 "merS123"로 바꾼 "ProgrammerS123"를 return 합니다.
문제를 읽고도 뭔 소린지 이해가 안 가서 한참을 들여다봤다. 문제 풀이 할 때마다 매번 레전드를 갱신할 정도로 바보가 된다.
내가 이해하기 쉽게 다시 설명한다.
1. 문자열
my_string
에서index s
부터는 날리고overwrite_string
을 붙인다.
2. 1의 과정을 끝낸 것을 문자열 a라고 하자. 만약문자열 a의 길이
와my_string.length();
가 다르면 어떡하나?
3. 2의 조건일 경우, 문자열 a에my_string의 남은 뒷 부분
을 더해준다.
1에서 2까진 어렵지 않았다. my_string의 남은 뒷 부분을 어떻게 코드로 구현해야하는지가 문제였다. 여기서 또 생각한다고 시간을 엄청 썼다...
my_string.substring(a,b)
를 사용하면 남은 뒷 부분이 여러 글자라도 간단하게 자를 수 있다.
a는 index s
와 overwrite_string.length()
를 더한 값을 넣어주면 된다.
굳이 b를 my_string.length()로 넣어줄 필요는 없다. 어차피 a만 넣어도 my_string의 끝까지 잘라지니까. 이걸 코드를 다 쓰고 알았다. 그래서 제출했던 코드가 제법 길다...
class Solution {
public String solution(String my_string, String overwrite_string, int s) {
int l = my_string.length();
int l2 = overwrite_string.length();
String answer = my_string.substring(0, s) + overwrite_string;
if (my_string.length() > answer.length()) {
answer += my_string.substring(l2+s, l);
}
return answer;
}
}
나는 if 조건문을 넣었지만 굳이 안 넣어도 잘 돌아간다.
if 를 생략하고
String answer = my_string.substring(0, s) + overwrite_string + my_string.substring(s+l2);
String answer를 이렇게 짜는 게 더 깔끔해 보인다.