내일배움캠프 4기 React 29일차(겹치는 선분의 길이, React)

최영진·2022년 12월 8일
0
post-custom-banner

1. 겹치는 선분의 길이


function solution(lines) {
  var a = [...Array(lines[0][1] - lines[0][0] + 1)].map(
    (_, a) => a + lines[0][0]
  );
  var b = [...Array(lines[1][1] - lines[1][0] + 1)].map(
    (_, a) => a + lines[1][0]
  );
  var c = [...Array(lines[2][1] - lines[2][0] + 1)].map(
    (_, a) => a + lines[2][0]
  );
  let a_list = a.filter((a) => b.includes(a));
  let b_list = a.filter((a) => c.includes(a));
  let c_list = b.filter((b) => c.includes(b));

  let total = [...a_list, ...b_list, ...c_list];
  let array = new Array(201).fill(-1);

  total = total.map((a) => a + 100);

  for (let i = 0; i <= total.length - 1; i++) {
    array[total[i]] += 1;
  }
  let ans_2 = array.filter((a) => (a !== -1) & (a !== 0));
  let min_2 = ans_2.length > 0 ? ans_2.length - 1 : (ans_2.length = 0);

  let ans_1 = ans_2.map((a) => a - 1);
  let min_1 = ans_1.length > 0 ? ans_1.length - 1 : (ans_1.length = 0);

  let answer1 = a_list.length > 0 ? a_list.length - 1 : (a_list.length = 0);
  let answer2 = b_list.length > 0 ? b_list.length - 1 : (b_list.length = 0);
  let answer3 = c_list.length > 0 ? c_list.length - 1 : (c_list.length = 0);

  let answer = answer1 + answer2 + answer3 - min_2 - min_1;


  return answer;
}

난이도 진짜로!!!!! 4시간 걸렸다..

처음에 구상은 값이 0이고 길이는 201인 배열(0을 포함해야함)을 하나 생성하여 입력값의 시작과 끝 값의 인덱스에 +1 을 해준다.

그 다음 0 인 데이터는 지우고 -1을 해주면 0, 1, 2로 구성된 배열이 나오는데 0 은 겹치는게 없는 인덱스 이고 1, 2가 겹친 인덱스 이다.
인덱스가 한개만 동떨어져있다면 제외.
그후 값이 2인 인덱스의 length-1, 전체 -1 한 후에 값이 1인 인덱스 length-1 을 하려함.

하지만 그림과 같이

-1 에서 0 사이는 겹치지 않았지만 -1 과 0이 값이 2로 도출되어 실패하였다.

결국 사용한 방법은 이것이다.

입력 값을 a, b, c 로 교집합을 a_list, b_list, c_list 로 넣어준다.

그다음 겹치는 게 있는 값들만 min_1, min_2 로 모아서
결과 값에서 빼준다.

2. React

profile
안녕하시오.
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 12월 9일

점점 알고리즘을 뿌셔가시는...!!!

답글 달기