TIL 20221104 - 129번(forEach)

hoin_lee·2022년 11월 4일
0

TIL

목록 보기
93/236

다음 주 월요일까진 매니저일이 많아 계속 밀릴 거 같은데.. 오늘은 발표회가 있어 저녁 7시에 끝이 났다.
그러다보니 몸도 피곤하고 알고리즘 문제 하나만 풀어야지 했는데 난이도가 있던거라 되게 어려웠고 결국 풀어내질 못했다.
그래서 다른사람 풀이를 봤는데 생각보다 직관적으로 풀어내서 이런 방법도 있구나라고 생각하게 되는 계기였던 것 같다.

https://school.programmers.co.kr/learn/courses/30/lessons/120876#
겹치는 선분의 길이 라는 문제인데 0단계지만 어려웠음!

나는 여러 조건들을 찾아가며 풀어보려 했는데 다른 사람 풀이들을 보니 fill을 통해 모든 영역을 채우고 주어진 선분에 1을 추가하는 식으로 하여 2 이상이 될 경우를 모두 더해 겨친 선분의 길이를 구하는 방식이었다.

function solution(lines) {
    let line = new Array(200).fill(0);

    lines.forEach(([a, b]) => {
        for(; a < b; a++) {
            line[a+100]++
        }
    });

    return line.reduce((a, c) =>  c > 1 ? a + 1 : a, 0)
}

이 방법과

function solution(lines) {
  const visited = lines.reduce((a, [x, y]) => {
    for (let i = Math.min(x, y); i < Math.max(x, y); i++) a[i] = a[i] ? a[i] + 1 : 1;
    return a;
  }, {});

  return Object.values(visited).filter(v => v > 1).length;
}

이 2가지 방법이 있었는데 아래는 좀 더 분석을 해봐야 할 것 같다.

forEach

주어진 함수를 배열 요소 각각에 대해 실행한다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

const array1 = ['a', 'b', 'c'];

array1.forEach(element => console.log(element));

// expected output: "a"
// expected output: "b"
// expected output: "c"

구문
arr.forEach(callback(currentvalue[, index[, array]])[, thisArg])

매개변수

  • callback
    각 요소에 대해 실행할 함수, 다음 세가지 매개변수를 받는다.
    • currentValue
      처리할 현재 요소
    • index
      처리할 현재 요소의 인덱스
    • array
      forEach()를 호출한 배열
  • thisArg
    callback을 실행할 때 this로 사용할 값

forEach()는 주어진 callback을 배열에 있는 각 요소에 대해 오름차순으로 한 번씩 실행한다. 삭제 했거나 초기화 하지 않은 인덱스 속석에 대해 실행하지 않는다.

for문을 forEach로 바꾸거나 배열을 출력하는등의 내용은 링크를 참조해보자

profile
https://mo-i-programmers.tistory.com/

0개의 댓글