🧠 문제 요약
- 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)시간복잡도를 가진다!!
반응형
'Study > Coding Test' 카테고리의 다른 글
[baekjoon] 괄호(JavaScript) (0) | 2025.08.23 |
---|---|
[baekjoon] 카드2(JavaScript) (1) | 2025.08.22 |
[baekjoon] 체스판 다시 칠하기(JavaScript) (0) | 2025.08.20 |
[baekjoon] 좌표 정렬하기(JavaScript) (1) | 2025.08.19 |
[baekjoon] 나이순 정렬(JavaScript) (0) | 2025.08.18 |