본문 바로가기

알고리즘/🥈 실버

백준 10815 숫자 카드 자바스크립트 풀이

728x90

난이도 : 실버5

풀이일 : 2403166

https://www.acmicpc.net/problem/10815

 

10815번: 숫자 카드

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net


링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐


풀이 코드

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');

const N = parseInt(input[0]);
// 카드를 저장할 배열
const set = new Set();

// 가지고 있는 카드 정보 Set에 추가
const cards = input[1].split(' ').map(Number);
for (let i = 0; i < N; i++) {
    set.add(cards[i])
}

// 가지고 있는지 확인할 카드 정보
const M = parseInt(input[2]);
const target = input[3].split(' ').map(Number);
let result = '';

// 타겟이 Set에 들어있는지 확인 후 result에 결과 추가
for (let i = 0; i < M; i++) {
    if (set.has(target[i])) {
        result += '1 ';
    }
    else {
        result += '0 ';
    }
}

console.log(result);
  • 입력되는 데이터의 양이 많으면 리스트 비교의 시간복잡도가 문제가 될 수 있으므로 Set 자료형 사용
  • set : 가지고 있는 카드를 저장하는 Set
  • target : 가지고 있는지 확인할 숫자들. 순서를 유지하기 위해 배열 자료형 유지
  • target의 길이만큼 순회하며 각 요소가 set에 있는지 확인

느낀점

  • 자바 스크립트로 Set은 처음 써보는 것 같다. 프로젝트 할때 당장 결과물을 만들기 위해서만 코딩을 급하게 했었는데, 이런 특성을 알고 충분히 고민해서 코딩했으면 더 효율적이었을 것 같다. 지금부터라도 기초를 다시 채워봐야지