[JS] 프로그래머스 / 코딩테스트 입문 / 코드 처리하기

2023. 5. 25. 12:04· 코딩 테스트/programmers
목차
  1. 문제
  2. 메모
  3. 정답

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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"
  );
}

저작자표시 비영리 변경금지 (새창열림)
  1. 문제
  2. 메모
  3. 정답
'코딩 테스트/programmers' 카테고리의 다른 글
  • [JS] 프로그래머스 / 코딩테스트 입문 / 주사위 게임 3
  • [JS] 프로그래머스 / 코딩테스트 입문 / 왼쪽 오른쪽
  • [JS] 프로그래머스 / 코딩테스트 입문 / 배열 만들기 2
  • [JS] 프로그래머스 / 코딩테스트 입문 / 전국 대회 선발 고사
카버
카버
카버
카버의 코딩일기
카버
  • All (414)
    • JavaScript (36)
    • CSS (1)
    • TypeScript (6)
    • React (17)
    • Redux (6)
    • Next.js (13)
    • Gatsby (2)
    • 코딩 테스트 (305)
      • programmers (238)
      • Baekjoon (51)
      • CroCoder (15)
    • ETC (28)
      • Error (9)
      • CS (8)
      • Terminal (2)
      • GitHub (1)
hELLO · Designed By 정상우.v4.2.2
카버
[JS] 프로그래머스 / 코딩테스트 입문 / 코드 처리하기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.