본문 바로가기

코딩/알고리즘

백준) 10815 - 숫자 카드 JS

📌 문제 링크

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


📌 문제 탐색하기

  • 입력으로 주어진 M개의 수에 대해서, 각 수가 적힌 숫자 카드를 상근이가 가지고 있으면 1을, 아니면 0을 공백으로 구분해 출력한다.

시간복잡도

  • O(n)

알고리즘 선택

  • 해시맵

📌 코드 설계하기

  1. 문제의 `input`을 개행으로 분리합니다.
  2. `N`은 `input`의 첫 번째 인덱스 값을 가져와 공백으로 구분하여 숫자로 변환합니다.
  3. `M`은 `input`의 세 번째 인덱스 값을 가져와 공백으로 구분하여 숫자로 변환합니다.
  4. `Map`을 선언합니다.
  5. `N`의 값을 순회하면서 각 요소를 key로, 값은 `false`로 하여 `map`에 저장합니다.
  6. `M`을 순회하면서 저장한 `map`에 해당 값이 있다면 `1`을 아니면 `0`을 `answer` 변수에 저장합니다.
  7. `answer`를 띄어쓰기로 구분하여 출력합니다.

📌 정답 코드

틀리지는 않았는데 `M`을 기준으로 `N`에 값이 있는 지를 확인해야 하는데 이 부분에서 헷갈렸다...

  • `M`의 각 값이 `N`에 존재하는지 여부 => `M`을 기준으로 순회하며 `N`에 존재하는지 확인

그리고 `map()` 메서드를 잘 활용할 수 있도록 해야겠다. 

//https://www.acmicpc.net/problem/10815
export {};

const fs = require("fs");
const filePath =
  process.platform === "linux" ? "/dev/stdin" : __dirname + "/input1.txt";
const input = fs.readFileSync(filePath).toString().trim().split("\n");
const N = input[1].split(" ").map(Number);
const M = input[3].split(" ").map(Number);

const map = new Map();
for (const x of N) {
  map.set(x, false);
}

const answer = M.map((x: number) => (map.has(x) ? 1 : 0));
console.log(answer.join(" "));

 

'코딩 > 알고리즘' 카테고리의 다른 글

백준) 1904 - 01타일 JS  (0) 2024.11.22
백준) 2747 - 피보나치 수 JS  (0) 2024.11.21
백준) 7785 - 회사에 있는 사람 JS  (0) 2024.11.19
백준) 28279 - 덱 2 JS  (1) 2024.11.18
백준) 18258 - 큐2 JS  (0) 2024.11.17