const fs = require('fs');
// const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
// let inputArr = fs.readFileSync(filePath).toString();
let inputArr = fs.readFileSync(__dirname + '/input.txt').toString();
const stdAllCount = 30; // 1~30
let stdAllArray = [];
for(let i = 0; i < stdAllCount; i++) {
stdAllArray[i] = i + 1;
} // [1, 2,..., 30]
let stdArray = inputArr.split('\n');
stdArray = stdArray.sort(function(a, b){
return a-b; //숫자의 오름차순 정렬
});
// 배열을 미리 숫자로 형변환해줘야 정확한 값이 나올 수 있음;
stdArray.forEach((value, idx) => stdArray[idx] = Number(stdArray[idx]));
//차집합 -> 모든 학생 배열에서 과제를 제출한 학생 배열을 빼주면 과제를 안낸 학생 배열을 얻을 수 있는 것
let result = stdAllArray.filter(x => !stdArray.includes(x));
for (let i = 0; i < result.length; i++) {
console.log(result[i]);
}
아~~ 자꾸 차집합으로 풀어줘야지 하는데 잘 안먹어서 왜 그러지? 서칭해도 제대로 filter() 와 includes() 를 쓰고 있는데..
하다가 ....
설마 읽어온 배열값이 문자열로 저장되어서? 라는 마음에 Number()로 형변환 해줬더니 바로 해결됐다 ㅡㅡ
아니 오름차순으로 sort 해줬으니 당연히 자동 형변환 될 것이라고 안일하게 생각한 내 탓이다 ......하
여하튼 드디어 해결했다!
arr1 = [ 1, 2, 3 ];
arr2 = [ 3, 4, 5, 7 ];
// 배열의 차집합
let diff = arr1.filter( x => !arr2.includes(x) ); // diff = [ 1, 2 ]
// 배열의 교집합
let intersection = arr1.filter( x => arr2.includes(x) ); intersection = [ 3 ]
배열.filter()
인자로 들어가는 함수의 조건에 true 인 경우, 그 값은 새로운 배열로 리턴
배열.includes()
인자로 들어가는 값이 배열 안에 존재하는 경우 true
'자료구조 알고리즘 > 코딩테스트 풀이' 카테고리의 다른 글
프로그래머스 Lv0 최댓값 만들기(2) (0) | 2023.02.19 |
---|---|
프로그래머스 Lv0 직각삼각형 출력하기 (0) | 2023.02.19 |
백준 4344번 평균은 넘겠지 (0) | 2023.02.12 |
백준 2884 자바스크립트(node js) (0) | 2023.02.02 |
백준 1330번 문제, node.js로 제출하기... (0) | 2023.01.31 |