알고리즘
[BOJ] 25192 - 인사성 밝은 곰곰이(JS)
로돌씨
2024. 10. 4. 10:02

나의 풀이
let fs = require("fs");
let input = fs.readFileSync('예제.txt').toString().trim().split("\n");
let N = input.shift();
input = input.join(" ");
let arr = []
let answer = 0;
let newArr = input.split("ENTER")
for(let i = 0; i <newArr.length; i++){
if(newArr[i] !== ''){
arr = newArr[i].trim().split(" ")
if(arr !== ''){
let set = new Set(arr);
answer += [...set].length
}
}
}
console.log(answer)
처음에는 이렇게 풀었었다. ENTER를 기준으로 문자열을 나누어 배열로만들고 그 배열에서 set을 이용해 중복을 없애고 수를 카운트하여 계산했다. 결과는 실패... 무엇이 문제인가 찾다가 예시로 ENTER 를 연속으로 추가하니 빈문자열이 set객체에 들어가 그 수를 카운트 하고있었다...
수정한 코드
let fs = require("fs");
let input = fs.readFileSync('예제.txt').toString().trim().split("\n");
let N = input.shift();
input = input.join(" ");
let answer = 0;
// ENTER로 split한 후, 각 요소에서 공백을 제거하고 빈 문자열을 필터링
let newArr = input.split("ENTER").map(x => x.trim()).filter(x => x !== "");
for (let i = 0; i < newArr.length; i++) {
if (newArr[i] !== '') {
let arr = newArr[i].trim().split(" ").filter(x => x !== ""); // 공백 제거 후 빈 문자열 필터링
let set = new Set(arr); // 중복을 제거한 후 카운트
answer += set.size;
}
}
console.log(answer);
따로 set를 다시 배열로 만들어 길이를 구하는것을 size를 이용해 크기를 구해 쓸데없는 코드를 줄였다.
그리고 filter를 이용해 빈문자열이 아닐 경우에만 추가했다. 결과는 성공!