본문 바로가기
자료구조 알고리즘/코딩테스트 풀이

백준 5597번 과제 안 내신 분?

by 쿠리의일상 2023. 2. 16.

 

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