본문 바로가기
Algorithm/Baekjoon

백준 5597번

by minhi 2024. 10. 29.

백준 5597번을 풀어보았다.

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n').map((i) => Number(i))

let student = []

for (let i = 1; i <= 30; i++) {
  student.push(i)
}

for (const i of input) {
  for (const s of student) {
    if (i === s) {
      const index = student.indexOf(s)
      student.splice(index, 1)
    }
  }
}

student.sort((a, b) => a - b)

student.forEach((value) => console.log(value))

 

student 배열에 1~30을 추가한 뒤 input 배열과 student 배열을 비교해 input 배열에 존재하는 값은 student 배열에서 제거한다.

 

결과적으로 student 배열에는 input 배열에 존재하지 않는, 즉 과제를 제출하지 않은 학생의 번호만 남게 된다.

 

결과는 올바르게 출력하지만 student 배열에 값을 애써 추가하고 다시 삭제하는 과정이 비효율적인 것 같아 다른 풀이를 찾아보았다.

 

1. indexOf 메소드

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n').map((i) => Number(i))

let not = []

for (let i = 1; i <= 30; i++) {
  if (input.indexOf(i) < 0) not.push(i)
}

not.sort((a, b) => a - b)

not.forEach((value) => console.log(value))

 

과제를 제출하지 않은 학생의 번호를 저장할 배열 not을 생성하고

 

1~30 중 input.indexOf(i)가 음수인, 즉 input 배열에 존재하지 않는 번호를 not에 push하였다.

 

2. fill 메소드

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n').map((i) => Number(i))

let student = new Array(30).fill(false)

for (const i of input) {
  student[i-1] = true
}

let not = []

for (let i = 0; i < 30; i++) {
  if (!student[i]) {
    not.push(i+1)
  }
}

not.sort((a, b) => a - b)

not.forEach((value) => console.log(value))

 

student 배열의 모든 요소를 false로 초기화하고 input 배열에 존재하는 번호만 student 배열의 값을 true로 변경한다.

 

이후 과제를 제출하지 않은 학생의 번호를 저장할 배열 not을 생성하고

 

student 배열의 값이 false인 번호를 not에 push하였다.

 

fill 메소드 처음 본다고 생각했는데 직전 포스팅에서 이미 다뤘었다. ㅡㅡ

 

참고) 백준 10810번, 10813번

 

3. includes 메소드

 

Array 객체의 includes 메소드는 배열에 특정 값이 존재할 경우 true를, 존재하지 않을 경우 false를 반환한다.

let input = require('fs').readFileSync('example.txt').toString().split('\n').map((i) => Number(i))

let not = []

for (let i = 1; i <= 30; i++) {
  if (input.includes(i)) {
    continue
  } else {
    not.push(i)
  }
}

not.sort((a, b) => a - b)

not.forEach((value) => console.log(value))

 

과제를 제출하지 않은 학생의 번호를 저장할 배열 not을 생성하고


includes 메소드를 사용해 input 배열에 1~30이 존재하는지 확인하고 존재하지 않을 경우 not에 push한다.

 

💫 이 문제를 통해 배운 것

•  배열을 특정 값으로 채울 때는 fill 메소드를 사용할 수 있다.
•  배열에 특정 값이 존재하는지 여부는 indexOf 메소드와 includes 메소드를 사용해 확인할 수 있다.

'Algorithm > Baekjoon' 카테고리의 다른 글

백준 1546번  (0) 2024.10.31
백준 10811번  (0) 2024.10.31
백준 10810번, 10813번  (0) 2024.10.10
백준 10818번  (0) 2024.10.10
백준 10951번  (0) 2024.10.09