[TIL] 프로그래머스 문자열 섞기
어제 문제를 풀면서
분명히 답은 똑같이 나왔는데 답이 아니라고 해서 애를 먹었었다.
오늘 다시 풀어보니 답이 나와서 기쁘다.
문제 접근 방법
- 초반의 접근 방법😵
//문자열을 어떻게 겹치지? 배열에 순서를 넣음.
//문자열을 단어로 쪼갠다.
//인덱스 0 0 1 1 2 2 3 3 4 4 5 5...
//새로운 문자열을 받을 배열 변수를 준비한다.
- 후반의 접근 방법😄
//문자열에 각각의 고유한 인덱스 번호가 있음.
//a의 인덱스 번호와 b의 인덱스 번호가 맞다면~
//그 둘을 더해서 새로운 배열에 저장해줘.
//이거를 배열의 길이 만큼 반복해서 저장해줘.
나의 문제 풀이
프로그래머스 자체에서 준 힌트는 주석 처리하고 풀었던 나..
이래서 계속 답이 ababababab 이렇게 나왔나 보다. ( 정답: "ababababab" )
function solution(str1, str2) {
//var answer = "";
//return answer;
let Array = [];
for( i = 0; i < str1.length; i++){
if(str1.index == str2.index){
let add = [str1[i]+str2[i]];
Array += add;
}
}
console.log(answer);
}
프로그래머스에서 준 힌트를 받아먹고 다시 푼 풀이
조건: str1의 인덱스와 str2의 인덱스가 같다면~
str1의 인덱스 + str2의 인덱스를 더해줘
더한 값을 answer라는 변수에 넣어줘
이 과정을 5번 반복해줘
function solution(str1, str2) {
var answer = "";
for( i = 0; i < str1.length; i++){
if(str1.index == str2.index){
let add = [str1[i]+str2[i]];
answer += add;
}
}
return answer; //"ababababab"
}
힌트를 참고해서 풀어보니 답이 나왔다.
다른 사람의 문제풀이1
# 스프레드 문법 # map()메서드 # join 메서드
function solution(str1, str2) {
return [...str1].map((x, idx)=> x+str2[idx]).join("");
}
스프레드 문법을 사용하여
문자열, 배열을 개별 요소로 분리하여, 새로운 배열로 만들어준다.
"abc" -> [ 'a', 'b', 'c' ] 이와 같은 배열이 생성된다.
이렇게 생성된 map() 메서드와 같은 배열 메서드를 사용할 수 있다.
str1과 str2의 각 인덱스에 해당하는 문자열을 합쳐서 새로운 배열을 만들고,
join ("") 메서드를 사용해서 문자열로 변환한 후 반환한다.
return은 함수의 실행을 중단하고 값을 반환한다.
함수가 값을 반환하는 경우, 해당 값을 다른 변수에 할당하거나 다른함수의 인자로 전달 가능하다.
함수가 값을 반환하지 않는 경우, undefined가 반환된다.
다른 사람의 문제풀이2
나와 비슷하게 풀었지만 더 간결하게 코드를 작성해주셨다.
function solution(str1, str2) {
const strlen = str1.length;
let answer="";
for(let i = 0 ; i < strlen ; i++)
answer+= str1[i]+str2[i];
return answer;
}
strlen 이라는 변수에 str1.length 길이를 담은 변수 선언.
str1[ i ] + str2[ i ] 를 더한 값을 answer라는 변수에 담아주고 strlen 만큼 반복해주었다.
나는 if문으로 인덱스 값이 같은지 확인하는 작업을 거쳤었는데 굳이 작성하지 않고 구현할 수 있었다..
다른 사람의 문제풀이3
function solution(str1, str2) {
return [...str1].reduce((prev, char, i) => prev + char + str2[i], '');
}
여기서도 스프레드 문법을 볼 수 있다.
해당 문법을 사용하여 각 문자가 배열 요소로 들어갈 수 있도록 만든 뒤,
reduce 메소드를 사용하여 배열의 각 요소를 처리하고, 새로운 문자열을 생성. (초기값으로 빈 문자열을 설정.)
reduce 콜백함수로 누산기, 현재 값, 현재 인덱스. 배열을 인자로 받아서
누산기에 현재 값과 str2의 동일한 인덱스에 있는 문자를 더한 결과를 반환한다.
1. 각 문자 char와 str2[ i ]을 더하여 prev에 누적한다.
2. str1과 str2 의 동일한 인덱스에 있는 문자들을 번갈아가며 합칠 수 있다.