본문 바로가기

Study/Coding Test

[baekjoon] 수 찾기(JavaScript)

📘 오늘의 코딩테스트 - 수 찾기(JavaScript)

🔢 문제 번호: 1020번

🔗 문제 링크: 백준 - 수 찾기

 

 

 

 

🧠 문제 요약

  • N개의 정수 배열에서 M개의 각 정수가 존재하는지 확인하는 문제
  • 각 정수가 배열에 존재하면 1, 존재하지 않으면 0을 출력한다
    • 입력: N(1 ≤ N ≤ 100,000), N개의 정수, M(1 ≤ M ≤ 100,000), M개의 정수
    • 출력: M개의 줄에 각각 존재하면 1, 없으면 0

 

 

 

✅ 실행 예시 및 결과

입력:
5
4 1 5 2 3
5
1 3 7 9 5

출력:
1
1
0
0
1

 

 

 

✍️ 내 풀이

  • Set 자료구조를 활용
  • 입력받은 N개의 정수를 Set으로 변환 후 M개의 각 정수를 has() 메소드로 탐색
  • 결과를 배열에 저장한 후 한 줄씩 출력

 

 

 

💻 내가 푼 코드

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

const N = parseInt(input[0]);
const arrN = input[1].split(' ').map(Number);
const M = parseInt(input[2]);
const arrM = input[3].split(' ').map(Number);

const setN = new Set(arrN);
const result = []

for(let i = 0; i < M; i++) {
    if(setN.has(arrM[i])) {
        result.push(1);
    } else {
        result.push(0);
    }
}

result.forEach((n)=>{
    console.log(n)
})

 

 

 

📎 남이 푼 코드

const input = require('fs').readFileSync('/dev/stdin', 'utf8').trim().split('\n');
const N = +input[0];
const setA = new Set(input[1].split(' ').map(Number));
const M = +input[2];
const targets = input[3].split(' ').map(Number);

targets.forEach(target => console.log(+setA.has(target)));
  • +input[0]: parseInt() 대신 단항 연산자로 간결하게 숫자 변환
  • 불필요한 변수 제거로 메모리 효율성 증대
  • 츳기 출력으로 코드 라인 수 감소
  • +setA.has(target): boolean을 숫자로 변환하는 깔끔한 방법

 

 

 

🔍 회고 & 배운 점

  • 처음에는 includes()를 사용하려고 했는데 시간복잡도로 시간 초과가 날 것 같아 안 썼다
  • 뭔가 간단하게 생각나는 메서드가 오래 걸리는 거 같아서 다른 걸 찾게 되서 오래 걸린다
  • 참고로 includes()는 O(N×M)시간복잡도를 가지고 has()는 O(1)시간복잡도를 가진다!!
반응형