길이가 같은 두 문자열 str1과 str2가 주어집니다.
두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해 주세요.
1 ≤ str1의 길이 = str2의 길이 ≤ 10
str1과 str2는 알파벳 소문자로 이루어진 문자열입니다.
입출력 예
str1 str2 result "aaaaa" "bbbbb" "ababababab"
function solution(str1, str2) {
let arr1 = str1.split('')
let arr2 = str2.split('')
let result = []
for(let i in arr1){
if(arr1[i] !== arr1[i+1]){
result.push(arr1[i])
}
result.push(arr2[i])
}
return result.join('')
}
split를 이용해 배열로 만들어주고
for문을 돌려 만약 arr1[i]
의 요소가 arr1[i+1]
와 다를 경우 result에 arr1[i]
추가 아닌 경우 arr2[i]
추가한 후 join해 문자열로 반환했다.
그러고 다른 사람들이 작성한 코드를 보니
저런 방법이...!
나는 너무 복잡하게 생각한거 같다.
function solution(str1, str2) {
let result = ''
for(let i in str1){
result += `${str1[i]}${str2[i]}`
}
return result
}
문자열은 유사 배열이기에 인덱스를 이용해 해당 값을 알아낼 수 있다.
이 점을 이용해 이전 코드보다 좀 더 간단하게 작업할 수 있었다!
function solution(str1, str2) {
return [...str1].map((x, idx)=> x+str2[idx]).join("");
}
나처럼 배열로 만들었지만 spread syntax와 map을 이용해 좀 더 간단하게 작성하셨다.
function solution(str1, str2) {
var answer = '';
var array1 = str1.split('');
var array2 = str2.split('');
array1.map((a,i) => {
answer = answer + a + array2[i];
});
return answer;
}
이분은 첫번째 분과 같은 방식이되 배열을 split로 작업하셨다.
function solution(str1, str2) {
return [...str1].reduce((prev, char, i) => prev + char + str2[i], '');
}
이분은 reduce를 이용해 작업하셨다.
여담이지만 큐로 작업하신 분도 계셔서 조금 깜짝 놀랐다...!
뭔가 반복되어야 하는 생각이들면
"값을 배열로 만들고 반복문 돌려서 작업하면 되겠구나"부터 생각하게 되는거 같다.
이번 기회를 통해 이런 생각을 반성하게 해준거 같다.
map, reduce 등의 메서드를 이용해 코드를 푸는 연습을 해보자!