[Java] 문자열 겹쳐쓰기

peace w·2023년 9월 26일
0

프로그래머스

목록 보기
4/25

문제

  • 문자열 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 soverwrite_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를 이렇게 짜는 게 더 깔끔해 보인다.

profile
더 성장하자.

0개의 댓글