⭐ intro : 문제를 생각해나간 방식
문제를 풀고 이해하는데 있어서 꽤나 오랜시간이 걸렸었다. 이 문제의 키포인트는 첫번째 문장의 '임스가 미니게임을 같이할 사람을 찾는다' 는 조건이었다. 이말인즉 임스는 '무조건' 게임에 한번씩 들어간다는 것이다. 즉 2, 3, 4명이서 플레이 하되 필요한 인원수는 임스 + n명이기에 필요한 인원수는 1, 2, 3명인 것이다. 그리고 같이 플레이하고자 하는 사람 중 동명이인은 존재하지 않는다라는 조건, 즉 중복조건을 제거하고 남은 인원수를 1, 2, 3명씩 나누면 임스랑 게임을 중복없이 진행하는 횟수를 만들게 된다.
⭐ 풀이과정
먼저 input값을 알맞게 잘 조리한다. 상단 조건중 인원수 N과 게임종료 G, 그리고 나머지 값들은 참여인원들이므로 전개연산자로 분리해두고, 런타임에러가 생기지 않도록 N명만큼만 사용하도록 배열을 잘라둔다.
let input = require("fs")
.readFileSync("./example.txt")
.toString()
.split("\n")
.map((line) => line.replace("\r", "").split(" "));
const [[N, G], ...arr] = input;
const rest = arr.slice(0, N);
function solution(G, rest) {}
solution(G, rest)
다음으로 중복값을 제거할 수 있도록 Set() 객체를 생성하여 전체 인원수를 Set()안에 추가해서 중복값을 제거한 값을 리턴받는다. 남은 인원수에서 임스랑 같이 게임하는 횟수를 구해야 하는데 게임 Y,F,O는 각각 임스를 제외하고 1,2,3명을 필요로 한다. 즉 전체 인원수에서 해당 인원수만큼으로 나누고, 가장 큰 정수값을 구하는 Math.floor값을 이용해서 해당 값을 구한다. 조건문은 switch를 이용해서 G값이 바뀔때마다 유동적으로 적용되도록 작업했다.
function solution(G, rest) {
const set = new Set();
for (let i of rest) {
set.add(i[0]);
}
const size = set.size;
switch (G) {
case "Y":
return Math.floor(size / 1);
case "F":
return Math.floor(size / 2);
case "O":
return Math.floor(size / 3);
}
}
⭐ 제출답안
let input = require("fs")
// .readFileSync(0, "utf-8")
.readFileSync("./example.txt")
.toString()
.split("\n")
.map((line) => line.replace("\r", "").split(" "));
const [[N, G], ...arr] = input;
const rest = arr.slice(0, N);
function solution(G, rest) {
const set = new Set();
for (let i of rest) {
set.add(i[0]);
}
const size = set.size;
switch (G) {
case "Y":
return Math.floor(size / 1);
case "F":
return Math.floor(size / 2);
case "O":
return Math.floor(size / 3);
}
}
console.log(solution(G, rest));
⭐ 공부했던 개념들
Math.floor() - JavaScript | MDN
Math.floor() 정적 메서드는 언제나 버림 처리하고 주어진 숫자와 같거나 작은 정수 중에서 가장 큰 수를 반환합니다.
developer.mozilla.org
- 종종 풀다가 런타임에러를 겪게 된다. 분명 테스트 케이스 상으로는 전부 통과되는데, 이 런타임에러가 발생하게 될때마다 허탈함이 밀려오는데, 이때 겪는 에러는 대부분 내가 전개연산자로 나머지 부분을 할당해서 받아올때 발생하게 되었었다. 그래서 나머지 배열값들을 받아올 때 slice로 조건문에 제시된 N개의 숫자만큼 잘라줘서 해당 부분만 딱! 사용한다고 명시를 해줘야 런타임에러가 걸리지 않게 된다. 괜히 조건문 앞에 N개의 숫자만큼 제시되는것이 아니다. 다 런타임 에러 제거하라고 명시해주는듯 하다.
'Algorithm' 카테고리의 다른 글
99클럽 코테 스터디 14일차 TIL - 브실이의 입시전략 (백준 29723 / JavaScript) (0) | 2025.04.18 |
---|---|
99클럽 코테 스터디 13일차 TIL - 단어 정렬(백준 1181 / JavaScript) (0) | 2025.04.17 |
99클럽 코테 스터디 11일차 TIL - Repeated DNA Sequences (리트코드 187 / JavaScript) (2) | 2025.04.15 |
99클럽 코테 스터디 10일차 TIL - 평행선(백준 2358 / JavaScript) (0) | 2025.04.14 |
99클럽 코테 스터디 9일차 TIL - Design HashMap (리트코드 706 / JavaScript) (0) | 2025.04.11 |