1. 해결 전략
.charAt()
을 사용하여 문자를 추출했습니다.
- 문자열
str1
과 str2
의 길이가 같으므로 for 루프를 순회하며 각각의 문자열의 문자 하나씩 문자열 answer
에 연산을 하여 저장합니다.
2. 구현코드
✅ String.valueOf()
class Solution {
public String solution(String str1, String str2) {
String answer = "";
for(int i = 0; i < str1.length(); i++){
answer += String.valueOf(str1.charAt(i)) + str2.charAt(i);
}
return answer;
}
}
3. 시간 & 공간 복잡도
- 시간 복잡도 : O(n)
- > str1.length()
만큼 반복문을 실행하여 시간 복잡도는 O(n)입니다.
- 공간 복잡도 : O(n)
- > 결과 문자열 answer
에 문자열을 추가할 때마다 새로운 문자열이 생성되어 메모리에 쌓이므로 최종적으로 결과 문자열의 길이만큼의 공간이 사용됩니다. 따라서 공간 복잡도도 O(n)입니다
4. Refactoring
- 이전 문제에서 이해한
StringBuilder
을 사용하여 문자열 메모리 사용을 최소화 하였습니다.
- 다른 코드를 보고
.split()
와 .toCharArray()
를 사용하여 풀어봤습니다. 형식이 비슷하기 때문에 금방 풀 수 있었습니다.
✅ .split() 사용
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();
}
}
✅ .toCharArray() 사용
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();
}
}
5. 후기 및 반성
- 제가 해결한 방법과 다른 분들의 코드를 비교를 해봤습니다. 결과적으로 코드의 형식은 비슷하나 다른 메소드를 활용하여 풀 수 있다는 것이 재미있었습니다.
- 다음에
charAt()
와 같은 메소드를 사용하기전에 다른 메소드 또한 생각해보려고 합니다.