문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
메모
Array.from()은 유사 배열 객체(array-like object)나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운 Array 객체를 만든다.
console.log(Array.from("foo"));
// Expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x));
// Expected output: Array [2, 4, 6]
// Array.from()과 화살표 함수 사용하기
// 배열 요소를 조작하기 위해 화살표 함수를 map 함수로 사용한다
Array.from([1, 2, 3], x => x + x);
// [2, 4, 6]
// 숫자 시퀀스 생성하기
// 배열이 각 위치마다 undefined로 초기화되므로 아래 x의 값은 undefined가 된다
Array.from({ length: 5 }, (x, i) => i);
// [0, 1, 2, 3, 4]
정답
function solution(code) {
// 결과를 저장하기 위한 빈 배열 ret을 초기화한다
let ret = [];
// 현재 모드를 나타내는 변수 mode를 0으로 초기화한다
let mode = 0;
// code 문자열을 한 글자씩 분리하여 반복한다
Array.from(code, (x, i) => {
if (mode === 0) {
// 모드가 0인 경우 현재 문자 x가 "1"이라면 모드를 1로 변경한다
if (x === "1") {
mode = 1; //
// 그렇지 않고, 인덱스 i가 짝수인 경우 문자 x를 ret 배열에 추가한다
} else if (i % 2 === 0) {
ret.push(x);
}
} else if (mode === 1) {
// 모드가 1인 경우 현재 문자 x가 "1"이라면 모드를 0으로 변경한다
if (x === "1") {
mode = 0;
// 그렇지 않고, 인덱스 i가 홀수인 경우 문자 x를 ret 배열에 추가한다
} else if (i % 2 === 1) {
ret.push(x);
}
}
});
// ret 배열의 길이가 0보다 큰 경우 ret 배열을 문자열로 변환하여 반환한다
// 그렇지 않은 경우 "EMPTY"라는 문자열을 반환한다
return ret.length > 0 ? ret.join("") : "EMPTY";
}
function solution(code) {
// 현재 모드(홀수 모드 또는 짝수 모드)를 나타내는 변수를 false로 초기화한다
let mode = false;
return (
Array.from(code).reduce((acc, cur, i) => {
// 현재 문자가 "1"인 경우 모드를 전환한다
if (cur === "1") {
// 모드를 반전(false면 true로, true면 false로)시킨다
mode = !mode;
// 현재 값을 반환하고 다음 요소로 이동한다
return acc;
}
// 현재 인덱스가 모드에 따라 처리해야 하는지 확인한다
if (i % 2 === (mode ? 1 : 0)) {
// 현재 값을 누적한다
return (acc = acc + cur);
} else {
// 현재 값을 유지한다
return acc;
}
// 누적된 결과가 없는 경우 "EMPTY"를 반환한다
}, "") || "EMPTY"
);
}
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
메모
Array.from()은 유사 배열 객체(array-like object)나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운 Array 객체를 만든다.
console.log(Array.from("foo"));
// Expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x));
// Expected output: Array [2, 4, 6]
// Array.from()과 화살표 함수 사용하기
// 배열 요소를 조작하기 위해 화살표 함수를 map 함수로 사용한다
Array.from([1, 2, 3], x => x + x);
// [2, 4, 6]
// 숫자 시퀀스 생성하기
// 배열이 각 위치마다 undefined로 초기화되므로 아래 x의 값은 undefined가 된다
Array.from({ length: 5 }, (x, i) => i);
// [0, 1, 2, 3, 4]
정답
function solution(code) {
// 결과를 저장하기 위한 빈 배열 ret을 초기화한다
let ret = [];
// 현재 모드를 나타내는 변수 mode를 0으로 초기화한다
let mode = 0;
// code 문자열을 한 글자씩 분리하여 반복한다
Array.from(code, (x, i) => {
if (mode === 0) {
// 모드가 0인 경우 현재 문자 x가 "1"이라면 모드를 1로 변경한다
if (x === "1") {
mode = 1; //
// 그렇지 않고, 인덱스 i가 짝수인 경우 문자 x를 ret 배열에 추가한다
} else if (i % 2 === 0) {
ret.push(x);
}
} else if (mode === 1) {
// 모드가 1인 경우 현재 문자 x가 "1"이라면 모드를 0으로 변경한다
if (x === "1") {
mode = 0;
// 그렇지 않고, 인덱스 i가 홀수인 경우 문자 x를 ret 배열에 추가한다
} else if (i % 2 === 1) {
ret.push(x);
}
}
});
// ret 배열의 길이가 0보다 큰 경우 ret 배열을 문자열로 변환하여 반환한다
// 그렇지 않은 경우 "EMPTY"라는 문자열을 반환한다
return ret.length > 0 ? ret.join("") : "EMPTY";
}
function solution(code) {
// 현재 모드(홀수 모드 또는 짝수 모드)를 나타내는 변수를 false로 초기화한다
let mode = false;
return (
Array.from(code).reduce((acc, cur, i) => {
// 현재 문자가 "1"인 경우 모드를 전환한다
if (cur === "1") {
// 모드를 반전(false면 true로, true면 false로)시킨다
mode = !mode;
// 현재 값을 반환하고 다음 요소로 이동한다
return acc;
}
// 현재 인덱스가 모드에 따라 처리해야 하는지 확인한다
if (i % 2 === (mode ? 1 : 0)) {
// 현재 값을 누적한다
return (acc = acc + cur);
} else {
// 현재 값을 유지한다
return acc;
}
// 누적된 결과가 없는 경우 "EMPTY"를 반환한다
}, "") || "EMPTY"
);
}