앞으로 매일 꾸준히 코딩테스트를 진행하면서 단계를 높여가보자.
길이가 같은 두 문자열 str1과 str2가 주어집니다.
두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해 주세요.

class Solution {
public String solution(String str1, String str2) {
String answer = "";
for(int i=0; i<str1.length(); i++) {
answer = answer + str1.charAt(i) + str2.charAt(i);
}
return answer;
}
}
answer += 를 이용하고 싶은데,,
str1.charAt(i), str2.charAt(i)는 개별문자이므로, 문자열에 추가하기 위해서 각각을 문자열로 변환해서 연결해야한다.
answer += String.valueOf(str1.charAt(i)) + String.valueOf(str2.charAt(i));
String -> char -> String 생각해보니, 뭔가 비효율적인 풀이 같다...
class Solution {
public String solution(String str1, String str2) {
StringBuilder sb = new StringBuilder();
String[] str1arr = str1.split("");
String[] str2arr = str2.split("");
for (int i=0; i < str1.length(); i++) {
answer += str1arr[i]+str2arr[i];
}
return sb.toString();
}
}
class Solution {
public String solution(String str1, String str2) {
StringBuilder sb = new StringBuilder();
char[] chars1 = str1.toCharArray();
char[] chars2 = str2.toCharArray();
for (int i=0; i<chars1.length; i++) {
sb.append(chars1[i]).append(chars2[i]);
}
return sb.toString();
}
}
String
- String 클래스의 인스턴스는 불변(immutable)이기 때문에 수정할 때마다 기존 메모리에 복사되는 것이 아니다.
- 문자열을 수정하면 실제로는 새로운 String 생성되고 이전 문자열은 가비지 컬렉터로 들어간다.
- 이로 인해 수정 작업이 필요한 경우 메모리에 새로운 문자열을 할당하는 것은 피할 수 없다.
StringBuilder
- StringBuilder 클래스는 가변성(mutable)을 가지며 내부적으로 버퍼를 사용하여 문자열을 조작한다.
- 문자열 수정 작업이 필요한 경우 StringBuilder는 기존 버퍼를 재사용하며 필요한 수정 작업을 String 클래스 보다 더 효율적으로 수행할 수 있다.
- 이로 인해 문자열 수정 작업이 많은 상황에서 StringBuilder를 사용하면 메모리 할당과 복사 작업을 효율적으로 관리할 수 있다.
toCharArray
- toCharArray 메서드는 문자열(String)을 char형 배열로 바꿔준다.
- 반환되는 배열의 길이는 문자열의 길이와 같다.
- 문자열의 공백 또한 인덱스에 포함한다. 즉, 공백 또한 문자로 취급
toString
- toString 메서드는 객체가 가지고 있는 정보나 값들을 문자열로 만들어 반환
참고자료