728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/42862?language=javascript
코드
- 나의 코드
function solution(n, lost, reserve) {
let answer = 0;
let stu = Array.from({length:n}, ()=>1); //n개의 길이의 배열에 1로 초기화
for(let i=1; i<=n; i++) { //학생이 1번부터 시작하니까 1부터
if(lost.includes(i) && reserve.includes(i)) { //lost, reserve모두 포함 학생은 체육복 개수 1로 고정
stu[i-1] = 1; //idx를 맞추기 위해 -1
}
else if(lost.includes(i)) { //잃어버린 학생은
stu[i-1]--; //체육복 개수 -1
}
else if(reserve.includes(i)) { //여분이 있는 학생은
stu[i-1]++; //체육복 개수 +1
}
}
for(let i=0; i<n; i++) {
if(stu[i]==0) { //stu배열을 돌면서 체육복이 0인 학생은
if(stu[i-1]==2) { //앞의 학생이 체육복이 2개면
stu[i-1] = 1;
stu[i] = 1;
}
else if(stu[i+1]==2) { //뒤의 학생이 체육복이 2개면
stu[i+1] = 1;
stu[i] = 1;
}
}
}
const result = stu.filter(i => i!==0); //stu배열에서 0을 제외한 배열만들기
answer = result.length;
return answer;
}
- 참고한 다른 분의 코드
function solution(n, lost, reserve) {
let answer = 0;
let stu = new Array(n).fill(1);
for(let i=0; i<lost.length; i++) {
stu[lost[i]-1]--;
}
for(let i=0; i<reserve.length; i++) {
stu[reserve[i]-1]++;
}
for(let i=0; i<stu.length; i++) {
if(stu[i]===0) {
if(stu[i-1]===2) {
stu[i]++;
stu[i-1]--;
}
else if(stu[i+1]===2) {
stu[i]++;
stu[i+1]--;
}
}
if(stu[i]>=1) {
answer++;
}
}
return answer;
}
후기
- 맨 처음 이 문제를 접근할 때 우선 n(학생 수)개로 구성된 배열을 만들고, 그 안에 초기값으로 1을 줘야겠단 생각을 먼저 하였다 (이유 : 맨 처음 체육복이 다 있다고 가정)
- n개의 배열을 만들고 초기화를 하기 위해 찾아보던 중 자바스크립트에 Array 객체의 from() 함수가 있다는 것을 알았고, 이를 이용하면 "let stu = [0,0,0,0,0,0,0,0,0,0,0,...];" 의 경우처럼 배열의 길이가 긴 경우 직접 값을 하나하나 입력하지 않아도 초기화를 시킬 수 있다
- Array.from() 사용법 : 첫번째 매개변수로 {length: 원하는 길이}를, 두번째 매개변수로 원하는 값을 반환하는 콜백함수를 넘겨주면 된다
- 다른 분의 코드를 보니 이 부분에서 Array 객체의 fill() 함수를 사용하였는데, 이게 더 가독성이 좋은 것 같다
- Array.fill() 사용법 : ex) let stu = new Array(n).fill(1); => n개의 배열에 '1'로 채우겠다는 의미
- 내가 작성한 코드는 lost, reserve 여부에 따른 체육복 개수를 고정하는 코드와 마지막 최종 answer을 구하는 과정에서 시간을 좀 잡아먹는 것 같다
- 다른 분의 코드가 내 코드보다 몇몇 테스트에서 더 시간이 단축돼서 결과가 나왔다
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers] 124 나라의 숫자 / JavaScript (0) | 2022.01.08 |
---|---|
[Programmers] 기능개발 / JavaScript (0) | 2022.01.07 |
[Programmers] 2016년 / JavaScript (0) | 2022.01.07 |
[Programmers] 모의고사 / JavaScript (0) | 2022.01.06 |
[Programmers] 신규 아이디 추천 / JavaScript (0) | 2022.01.05 |