리스트
논리학 교수
항승이가 칠판에 작성한 내용중 총 몇개의 내용이 참인지 출력
function solution(blackBoard) {
const input = blackBoard.split("\n");
const N = parseInt(input[0]);
if (!(50 >= N >= 1)) {
return -1;
}
const contents = input[1]
.split(" ")
.map(Number)
.sort((a, b) => b - a);
for (let i = 0; i < N; i++) {
let content = contents[i];
if (!(0 <= content <= 50)) {
return -1;
}
let count = 0;
for (let j = 0; j < N; j++) {
if (content === contents[j]) {
count++;
}
}
if (content === count) {
return content;
}
}
if (!contents.includes(0)) {
return 0;
}
return -1;
}
const blackBoard = `2
1 1`;
console.log(solution(blackBoard));
const contents = input[1]
.split(" ")
.map(Number)
.sort((a, b) => b - a);
답이 여러 가지라면 가장 큰 값을 출력하는 조건이 있기에 입력값을 내림차순으로 정렬하였다.
for (let i = 0; i < N; i++) {
let content = contents[i];
let count = 0;
for (let j = 0; j < N; j++) {
if (content === contents[j]) {
count++;
}
}
if (content === count) {
return content;
}
}
content에 칠판에 작성한 수 1개를 넣고 그 content와 같은 수가 있는지 체크한다.
content와 content와 같은 수의 개수를 비교해 같으면 정답으로 리턴한다.
if (!contents.includes(0)) {
return 0;
}
return -1;
만약 0개가 0개라면 정답은 0임으로 0을 리턴한다.
위의 모든 조건이 충족되지 않으면 모순되므로 -1을 리턴한다.
if (!(50 >= N >= 1)) {
return -1;
}
if (!(0 <= content <= 50)) {
return -1;
}
N은 1보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄은 50보다 작거나 같은 음이 아닌 정수이다.!