[221111] Pre-Onboarding 4일차 TIL

뜨개발자·2022년 11월 11일
0

TIL

목록 보기
4/75

Pre-Onboarding 자바스크립트

혼자 공부하는 자바스크립트 - 3일차

프로그래머스 - 택배상자

챕터 5 - 함수

기억해 둘 내용

  • forEach
    배열.forEach(function(value, index, array){ })
    배열 내 요소를 단순하게 사용

  • map
    배열.map(function(value, index, array){ })
    콜백 함수에서 리턴한 값들을 새로운 배열로 만들어줌

  • filter
    배열.filter(function(value, index, array){ })
    콜백 함수에서 리턴값이 true인 것들만 모아서 새로운 배열로 만들어줌

  • 화살표 함수
    (매개변수) => { } || (매개변수) => 리턴값
    콜백 함수에서 활용하는 function(){}의 간단한 형태로 활용 가능

  • 타이머 함수
    setTimeout(함수, 시간) -> 시간 후에 함수를 한 번 호출
    setInterval(함수, 시간) -> 시간마다 함수를 호출

clearTimeout(ID) -> setTimeout()으로 설정한 타이머 제거
clearInterval(ID) -> setInterval()로 설정한 타이머 제거

타이머 종료 함수의 매개변수인 ID의 경우, 타이머 호출 함수의 리턴값임

ex)

let id = setTimeout(()=>{ }, 초 * 1000);
clearTimeout(id);
  • 즉시 호출 함수
    함수를 선언하자마자 실행되도록 하는 것
    변수 스코프 충돌 방지를 위해 사용
    (function(){ })와 같이 사용

오늘 고민한 것

  • 프로그래머스 문제 : 택배상자
    https://school.programmers.co.kr/learn/courses/30/lessons/131704
    로직 구현은 잘 했고, 들어올 수 있는 배열의 길이가 1백만인 만큼 중첩 반복문을 사용하지 않는 선에서 깔끔하게 작성했다고 자신했다.
    직접 추가한 테스트 케이스까지도 정답을 잘 도출해내는데, 정답 제출을 하면 10개 중 1개의 경우만 정답, 이외에는 모두 오답 처리가 되었다. 해당 문제에만 두 시간을 들였는데도 해결하지 못해 결국 친구에게 도움을 요청했다.
    친구의 답변은 내가 문제의 조건을 잘못 이해했다는 것이었다. 내가 설정한 조건은 아래와 같다.
  1. 메인 컨테이너의 상자 번호를 확인한다.
    만일 당장 실어야 하는 상자라면, 해당 상자를 싣는다.
    당장 실어야 할 상자가 아니라면, 2번 조건을 확인한다.
  2. 서브 컨테이너의 상자 번호를 확인한다.
    만일 당장 실어야 하는 상자라면, 해당 상자를 싣고 그 전 상자를 앞으로 당긴다.
    당장 실어야 할 상자가 아니라면, 3번 조건을 확인한다.
  3. 서브 컨테이너가 비어있거나, 현재 서브 컨테이너의 상자번호, 메인 컨테이너의 상자번호를 확인한다.
    비어있는 경우, 메인 컨테이너의 상자를 서브 컨테이너로 옮긴다.
    메인 컨테이너의 상자번호와 서브 컨테이너의 상자번호의 차이가 1이면 메인 컨테이너의 상자를 서브 컨테이너로 옮긴다.
    만일 위의 두 경우에 모두 해당하지 않으면 4번으로 넘어간다.
  4. 옮길 수 있는 상자가 없으므로, 여기서 작업을 종료한다.

여기서 3번의 조건을 지적 받았다. 문제의 어디에서도 서브 컨테이너에 올라간 상자들의 서로간 번호 차이가 1만큼 나야 한다고 적혀있지 않았다. 1번부터 n번까지 순서대로 상자가 내려오는 것은 메인 컨테이너 뿐이었다. 이를 인식하고 해당 조건만 바꾸어 주었더니 바로 10문제 모두 정답으로 처리되었다.
성질 급하게 문제를 읽고 내 멋대로 해석하는 버릇을 좀 고쳐야지...

profile
뜨개질하는 개발자

0개의 댓글