- toCharArray() 메서드에 대해 알게 되었다.
- IntStream 의 존재에 대해 알게 되었다.
- 같은 기능을 하지만 성능과 효율측면에서 다양하게 구현할 수 있음을 알 수 있었다.
- 파이썬으로 알고리즘을 공부하고싶단 생각이 강하게 든다,,
[Java]
class Solution {
public String solution(String str1, String str2) {
String answer = "";
char[] array1 = str1.toCharArray();
char[] array2 = str2.toCharArray();
for (int i=0; i<array1.length; i++) {
answer += array1[i];
answer += array2[i];
}
return answer;
}
}
문자열을 반복적으로 결합하는 방식은 성능에 비효율적일 수 있습니다. (특히 문자열이 길 경우)
for(int i = 0; i < str1.length(); i++){
answer+= str1.charAt(i);
answer+= str2.charAt(i);
}
문자 결합 시 불필요한 변환이 없어서 코드가 조금 더 효율적일 수 있습니다.
for(int i = 0; i < str1.length(); i++) {
answer += String.valueOf(str1.charAt(i));
answer += String.valueOf(str2.charAt(i));
}
String.valueOf(char)를 사용하여 명시적으로 문자열로 변환하기 때문에 타입 변환을 더 명확하게 합니다.
불필요한 String.valueOf 호출로 인해 약간의 오버헤드가 발생할 수 있습니다.
char[] chars1 = str1.toCharArray();
char[] chars2 = str2.toCharArray();
StringBuilder sb = new StringBuilder();
for (int i=0; i<chars1.length; i++) {
sb.append(chars1[i]).append(chars2[i]);
}
return sb.toString();
문자열 결합을 반복적으로 수행할 때는 StringBuilder를 사용하는 것이 성능 면에서 유리합니다.
StringBuilder는 가변 문자열을 지원하므로 문자열 결합 시 메모리 사용을 줄일 수 있습니다.
return IntStream.range(0, str1.length())
.mapToObj(i -> Character.toString(str1.charAt(i)) + str2.charAt(i))
.collect(Collectors.joining());
Java 스트림 API를 사용 (Java 8 이상)
IntStream.range(0, str1.length())
--> 0부터 str1의 길이까지의 인덱스를 생성
.mapToObj(i -> Character.toString(str1.charAt(i)) + str2.charAt(i))
--> 각 인덱스에서 str1과 str2의 해당 문자를 추출하여 결합
.collect(Collectors.joining())
--> 결합된 문자열을 모두 연결하여 하나의 문자열로 만듦
https://data04190.tistory.com/59
https://m.blog.naver.com/ding-dong/221386518751
[Python]
for i in range(len(str1)):
answer += str1[i]
answer += str2[i]
[C]
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "abc";
char str2[] = "123";
int length = strlen(str1);
char answer[2 * length + 1]; // 두 문자열의 길이 합 + null terminator
int k = 0;
for (int i = 0; i < length; i++) {
answer[k++] = str1[i];
answer[k++] = str2[i];
}
answer[k] = '\0'; // 문자열의 끝을 표시
printf("%s\n", answer); // 결과: "a1b2c3"
return 0;
}