📌 문제 링크
https://www.acmicpc.net/problem/10815
📌 문제 탐색하기
- 입력으로 주어진 M개의 수에 대해서, 각 수가 적힌 숫자 카드를 상근이가 가지고 있으면 1을, 아니면 0을 공백으로 구분해 출력한다.
시간복잡도
- O(n)
알고리즘 선택
- 해시맵
📌 코드 설계하기
- 문제의 `input`을 개행으로 분리합니다.
- `N`은 `input`의 첫 번째 인덱스 값을 가져와 공백으로 구분하여 숫자로 변환합니다.
- `M`은 `input`의 세 번째 인덱스 값을 가져와 공백으로 구분하여 숫자로 변환합니다.
- `Map`을 선언합니다.
- `N`의 값을 순회하면서 각 요소를 key로, 값은 `false`로 하여 `map`에 저장합니다.
- `M`을 순회하면서 저장한 `map`에 해당 값이 있다면 `1`을 아니면 `0`을 `answer` 변수에 저장합니다.
- `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 |