저장을 습관화

프로그래머스 LV.0 왼쪽 오른쪽 본문

코딩 테스트/프로그래머스 - 자바스크립트

프로그래머스 LV.0 왼쪽 오른쪽

ctrs 2023. 9. 30. 22:07

프로그래머스 LV.0 왼쪽 오른쪽

https://school.programmers.co.kr/learn/courses/30/lessons/181890

 

프로그래머스

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

programmers.co.kr

 

1. 문제 명

왼쪽 오른쪽


2. 문제 설명

문자열 리스트 str_list에는 "u", "d", "l", "r" 네 개의 문자열이 여러 개 저장되어 있습니다. str_list에서 "l"과 "r" 중 먼저 나오는 문자열이 "l"이라면 해당 문자열을 기준으로 왼쪽에 있는 문자열들을 순서대로 담은 리스트를, 먼저 나오는 문자열이 "r"이라면 해당 문자열을 기준으로 오른쪽에 있는 문자열들을 순서대로 담은 리스트를 return하도록 solution 함수를 완성해주세요. "l"이나 "r"이 없다면 빈 리스트를 return합니다.


3. 제한 사항

- 1 ≤ str_list의 길이 ≤ 20

- str_list는 "u", "d", "l", "r" 네 개의 문자열로 이루어져 있습니다.


4. 예시

str_list result
["u", "u", "l", "r"] ["u", "u"]
["l"] []


5. 기본 제공 코드

function solution(str_list) {
    var answer = [];
    return answer;
}


6. 제출한 내 답

const solution = (str_list) => {
  let leftIndex = str_list.indexOf("l");
  let rightIndex = str_list.indexOf("r");

  // 왼쪽 오른쪽 모두 없다면 빈 배열
  if (leftIndex === -1 && rightIndex === -1) {
    return [];
  }

  // 왼쪽 오른쪽 모두 있으며 왼쪽이 먼저 나옴
  if (leftIndex < rightIndex && leftIndex !== -1) {
    return str_list.slice(0, leftIndex);
  }

  // 왼쪽 오른쪽 모두 있으며 오른쪽이 먼저 나옴
  if (leftIndex > rightIndex && rightIndex !== -1) {
    return str_list.slice(rightIndex + 1);
  }

  // 왼쪽 없고 오른쪽만 있음
  if (leftIndex === -1 && rightIndex >= 0) {
    return str_list.slice(rightIndex + 1);
  }

  // 오른쪽 없고 왼쪽만 있음
  if (rightIndex === -1 && leftIndex >= 0) {
    return str_list.slice(0, leftIndex);
  }
};

 

6-2. VSC에 작성한 내용

const solution = (str_list) => {
  let leftIndex = str_list.indexOf("l");
  let rightIndex = str_list.indexOf("r");

  // 왼쪽 오른쪽 모두 없다면 빈 배열
  if (leftIndex === -1 && rightIndex === -1) {
    return [];
  }

  // 왼쪽 오른쪽 모두 있으며 왼쪽이 먼저 나옴
  if (leftIndex < rightIndex && leftIndex !== -1) {
    return str_list.slice(0, leftIndex);
  }

  // 왼쪽 오른쪽 모두 있으며 오른쪽이 먼저 나옴
  if (leftIndex > rightIndex && rightIndex !== -1) {
    return str_list.slice(rightIndex + 1);
  }

  // 왼쪽 없고 오른쪽만 있음
  if (leftIndex === -1 && rightIndex >= 0) {
    return str_list.slice(rightIndex + 1);
  }

  // 오른쪽 없고 왼쪽만 있음
  if (rightIndex === -1 && leftIndex >= 0) {
    return str_list.slice(0, leftIndex);
  }
};

// 테스트
console.log(solution(["u", "u", "l", "r"]));
console.log(solution(["r", "u", "d", "l"]));
console.log(solution(["u", "d", "l"]));


7. 특이사항

아니 이 정도는 하드코딩 아니지 않나


8. 다른 사람이 작성한 답

8-1. 가장 많이 쓰인 풀이법

function solution(arr) {
    for(let i = 0; i < arr.length; i++) {
        if (arr[i] === 'l') return arr.slice(0, i);
        if (arr[i] === 'r') return arr.slice(i + 1);
    }
    return [];
}

 

8-2.

function solution(str_list) {
  const i = str_list.findIndex((str) => /l|r/.test(str));
  if (i === -1) {
    return [];
  }
  return str_list[i] === 'l' ? str_list.slice(0, i) : str_list.slice(i + 1);
}