[백준/Node.js] 5597 과제 안 내신 분...?

CCONAC·2022년 12월 27일
0

BAEKJOON + Node.js

목록 보기
2/4

문제

X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.

교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.


입력

입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다.


출력

출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력한다.


예제 입력

3
1
4
5
7
9
6
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

예제 출력

2
8

소스 코드

let N = require('fs').readFileSync(0).toString().split('\n').map(Number);

let x = []; // 1에서 30까지 없는 숫자 넣기 위한 배열

for (let i = 1; i < 31; i++) {
    if (N.includes(i)) continue; // 1-30까지 숫자 있는지 확인 (있으면 continue로 다음 넘어가지 않고 반복)
    x.push(i); // 없다면 해당 인덱스 배열 x에 push
}

x.sort((a, b) => a - b); // 오름차순으로 정렬
console.log(`${x[0]}\n${x[1]}`); // 출력

Comment

어려운 문제는 아닌데 짚고 넘어가야 할 부분이 있을 것 같아서 작성한다.

오름차순으로 정렬하는 배열 객체인 sort()를 사용하는 것은 알고 있었는데 왜 sort((a, b) => a - b)처럼 작성해야 할까? 해서 그냥 x.sort()를 사용한 코드를 돌려 봤더니 틀렸다는 결과가 나왔다.

그래서 왜 sort 함수로는 정렬이 되지 않는가 궁금해서 검색해 보았더니 아주 이해 가기 쉽게 설명해 주신 분이 계셨다! 요약하자면 sort 함수는 문자열(String) 타입으로 간주하고 비교하기 때문에 그렇다는 것. 예를 들어 90과 100을 비교하면 100보다 90이 더 크다는 결론을 내려 정렬에 실패하는 것이다.

따라서 숫자를 오름차순으로 정렬해 주고 싶으면 sort((a, b) => a - b), 내림차순으로 정렬해 주고 싶으면 sort((a, b) => b - a)처럼 작성해 주면 된다.


Reference

https://change-words.tistory.com/64


profile
뭐라도 하자...

0개의 댓글