문자열 겹쳐쓰는 방법에 대하여(with. Java)
문자열 겹쳐쓰는 방법에 대하여(with. Java) 알아본 글입니다.
코딩 테스트 문제를 풀며, 풀었던 문제에 대한 회고와 다른 풀이 방법을 알아보며, 알아가고자 합니다. 문제에 대해 먼저 알아보겠습니다.
문제
문자열 my_string, overwrite_string과 정수 s가 주어집니다. 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.
입출력 예시
my_string: He11oWor1d overwrite_string: lloWorl s: 2 result: HelloWorld
즉, my_string에서 인덱스 2부터 overwrite_string의 길이만큼에 해당하는 부분은 “11oWor1”이고 이를 “lloWorl”로 바꾼 “HelloWorld”를 return 해야 하는 문제입니다.
문제에 대한 나의 풀이
class Solution {
public String solution(String my_string, String overwrite_string, int s) {
String answer = "";
char[] a = my_string.toCharArray();
char[] b = overwrite_string.toCharArray();
int j = 0;
int limit = s + b.length;
for(int i = s; i<limit; i++){
a[i] = b[j];
j++;
}
answer = new String(a);
return answer;
}
}
저 같은 경우 toCharArray() 메서드를 활용해 my_string, overwrite_string 총 2개의 string 타입의 변수를 character array타입으로 변경해서 저장합니다. 이럴 경우 문자 하나당 하나의 인덱스로 매핑됩니다. 이후, 각각의 for문으로 각각의 요소에 대해 s번째 요소부터 j를 통해 문자열을 대체하는 방식으로 이 문제를 풀었습니다. 더하여 마지막에 char형 배열을 new String() 함수를 사용하여 합쳐 하나의 String 타입으로 만들어 출력하였습니다.
그럼 이제 java에서 제공하는 함수를 사용하여 더 깔끔하게 푸는 방식을 알아보겠습니다. 바로 substring()입니다. 이 함수는 string 타입에 대해서 원하는 위치에서 자를 수 있습니다.
substring() 사용법
substring()은 인자를 총 2개 받을 수 있습니다. substring(int beginIndex, int endIndex) 이렇게 사용할 수 있습니다. 이렇게 2개의 인자를 사용할 경우 beginIndex부터 endIndex까지의 문자열을 반환합니다.
substring(int beginIndex, int endIndex) 예시
String str = "012345";
// substring(int beginIndex, int endIndex)
str.substring(1,3)
// result: 123
또는 인자를 1개만 사용하는 방법도 있습니다.substring(int previousIndex) 이런식으로 말이죠. 이렇게 사용할 경우 0번 째 index부터 previousIndex에 적힌 int 타입의 숫자 -1번 째까지를 제외한 나머지 문자열을 반환합니다.
substring(int previousIndex) 예시
String str = "012345";
// substring(int index)
str.substring(3)
// result: 345
그럼 지금까지 배운 substring() 함수를 이용해 제가 짠 코드보다 간결하게 같은 문제를 해결해보도록 하겠습니다.
substring()을 활용한 풀이
class Solution {
public String solution(String my_string, String overwrite_string, int s) {
String before = my_string.substring(0, s);
String after = my_string.substring(s + overwrite_string.length());
return before + overwrite_string + after;
}
}
정말 짧아졌습니다. 작성된 코드는 문자열을 s의 기준에 맞춰 앞과 뒤로 잘라 변경할 문자열을 붙여넣는 방법을 사용했습니다. 저도 다음 테스트 문제에서 이 함수를 활용 해야겠습니다. 고생하셨습니다.