체육복 - javascript

Hoony·2022년 7월 16일
0

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42862

풀이

  • (핵심) 체육복을 잃어버렸지만, 여벌이 있는 학생은 자기것을 입는다.
    - 옆에 친구가 여벌이 있어도 빌려 입을 수 없다.
    (빌려 줄 수 있으면 더 많이 입을 수 있지만)
  • 잃어버린 사람 마킹
  • 여벌 있는 사람 마킹
  • 여벌이 있지만, 잃어버린 사람은 여벌 제외하고 체육복 있는 것으로 변환
  • 양 옆으로 없는 사람 빌려주기 로직
    - 왼쪽에 없으면 주고 continue
function solution(n, lost, reserve) {
    let students = Array.from({ length: n }).map((i, _) => ({ num: _ + 1, reserve: 0 }));
    lost.map(l => students[l - 1].num = 0);
    reserve.map(r => students[r - 1].reserve = 1)
    students.map((s, i) => {
        if (s.num === 0 && s.reserve === 1) {
            s.num = i + 1;
            s.reserve = 0;
        }
    })
    
    for (let i = 0; i < students.length; i++) {
        if (students[i].reserve === 1) {
            if (students[i - 1] && students[i - 1].num === 0) {
                students[i].reserve = 0;
                students[i - 1].num = i;
                continue;
            }
            
            if (students[i + 1] && students[i + 1].num === 0) {
                students[i].reserve = 0;
                students[i + 1].num = i + 2;
            }
        }
    }
    
    return students.filter(x => x.num !== 0).length
}

가끔 문제를 풀다보면,
로직은 맞다고 생각이 강하게 들면서 안풀리는 경우가 있다.
결국 문제를 제대로 읽지 않은 이유가 대부분이다.
programmers문제는 한글로 출제됨에도 문제를 제대로 보지 않았다.

업무에서도, 아무리 논리적으로 잘 정리하였다 하더라도
읽는 사람이 해석을 잘못 할 수 있다.
코딩 문제야 이런 부분을 노린것이기 때문에 할 말이 없지만
실제 업무에서는 상대방을 위해 좀 더 노력을 기울이고
나 또한 놓친 것이 없는지 더 꼼꼼하게 보도록 노력해야겠다.

profile
아는 만큼 보인다

0개의 댓글