Poylib
기록형 프론트엔드
Poylib
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • Programing (38)
      • Javascript (17)
      • Typescript (1)
      • React (9)
      • React-Native (6)
      • Git (4)
      • Next (1)
    • Study (36)
      • Algorithm (35)
      • Etc. (1)
    • Record (17)
      • Memoirs (12)
      • Group (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • react-native
  • 코딩테스트
  • 백준
  • ReactNative
  • 리액트
  • Error
  • vite
  • javascript
  • react
  • 알고리즘
  • 자바스크립트
  • Git
  • 코칭스터디
  • 기초
  • 회고
  • Object
  • typescript
  • 프로그래머스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Poylib

기록형 프론트엔드

[BEAKJOON / node.js] 1920 수 찾기
Study/Algorithm

[BEAKJOON / node.js] 1920 수 찾기

2022. 6. 12. 14:19
https://www.acmicpc.net/problem/1920

// test.txt
5
4 1 5 2 3
5
1 3 7 9 5

sol1

let [_, N, $, M] = require('fs').readFileSync('test.txt').toString().trim().split('\n');
let set = new Set(N.split(' '));
let answer = M.split(' ').map(v => set.has(v) ? 1 : 0).join('\n');
console.log(answer);
// 1
// 1
// 0
// 0
// 1

Set에 담아서 해당 요소가 있는지 확인하고 출력하면 된다. 처음엔 N 배열을 받아서 바로 includes 메서드를 사용해 일치하는 요소가 있는지 확인했는데 배열을 바로 사용하면 시간 초과가 뜨고 Set은 이진 탐색보다도 빠르게 출력된다.

>> Set과 Array의 속도차이

 


sol2

let input = require('fs').readFileSync('test.txt').toString().trim().split('\n');
let numN = +input[0];
let N = input[1].split(' ').map(Number).sort((a,b) => a-b);
let M = input[3].split(' ').map(Number);

function binarySearch(arr,target,start,end) {
  let mid = 0;
  while(start<=end) {
    mid = Math.floor((start+end)/2);
    if(arr[mid] === target) return mid;
    else if(arr[mid] < target) start = mid +1;
    else end = mid-1;
  };
  return -1;
};

let answer = '';
M.forEach(el => {
  binarySearch(N,el,0,numN-1) !== -1 ? answer +=`1\n`: answer += `0\n`
});
console.log(answer);
// 1
// 1
// 0
// 0
// 1

최근에 이진탐색에 대해 배우기도 했고 마침 이진 탐색으로 풀 수 있는 문제여서 적용해 봤다. 이진 탐색의 경우 Set으로 제출했을 때 보다 출력 시간이 살짝 더 늦게 나오는 것 같다.

저작자표시 비영리 변경금지 (새창열림)

'Study > Algorithm' 카테고리의 다른 글

[BEAKJOON / node.js] 9935 문자열 폭발  (0) 2022.06.15
[programmers / JavaScript] JadenCase 문자열 만들기  (0) 2022.06.14
[BEAKJOON / node.js] 10816 숫자 카드 2  (0) 2022.06.11
[BEAKJOON / node.js] 11659 구간 합 구하기 4  (0) 2022.06.10
[BEAKJOON / node.js] 1439 뒤집기  (0) 2022.06.08
    'Study/Algorithm' 카테고리의 다른 글
    • [BEAKJOON / node.js] 9935 문자열 폭발
    • [programmers / JavaScript] JadenCase 문자열 만들기
    • [BEAKJOON / node.js] 10816 숫자 카드 2
    • [BEAKJOON / node.js] 11659 구간 합 구하기 4
    Poylib
    Poylib
    모시깽 기록

    티스토리툴바