본문 바로가기
2025/Solving

PGMRS_유연근무제(JavaScript)

by 껐다 켜보셨어요? 2025. 5. 10.

최근에 코테가 정말 자주 있는데

Java로도 봤다가 JavaScript로도 봤다가(FE라서;) SQL로도 봤다가 아무튼 점점 얼렁뚱땅이 되어가는 중

 

문제는 아래 링크로. 

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

전에도 말했듯 나는 풀이 과정에서 구조화(클래스 뚝딱 만들어서 정렬 기준 정해놓는 등의 커스터마이징)하는 걸 좋아하는데

이게 어느 정도냐면 학부 때 C 배울 때도 구조체... 라는 존재가 정말 마음에 들었던 전적이 있다(??)

다른 사람 답안을 보면 클래스를 하나도 안 쓰고도 문제를 풀어내던데 진짜 신기함

나는 그렇게 풀다 보면(특히 구현) 내 코드가 이해가 안 된다 ㅋㅋ

나중에 봤을 때도 그렇고 주석이 없으면 뭔 소리를 해 놓은 건지 모르겠음 

오늘 코테에서도 나름 구조화를 시킨다고 시키는데도 중간에 디버깅이 안 돼서 진짜 울 뻔했다

function solution(schedules, timelogs, startday) {
    // startday가 6이거나 7이면 로직과 관계 없음
    let answer = 0;
    for(let i = 0; i<schedules.length; i++){
        const temp = new Schedule(schedules[i], timelogs[i]) 
        if(temp.hasGift(startday)) answer++;
    }
    return answer;
}

class Schedule {
    constructor(due, schedules){
        this.due = new Time(due)
        this.due.add(10) // 10분 준다 
        this.logs = []
        for(let t of schedules){
            this.logs.push(new Time(t))
        }
        
    }
    
    hasGift(day){
        for(let i = 0; i<this.logs.length; i++){
            if((day+i)%7 == 0 || (day+i)%7 == 6) continue;
            if(!this.due.isSafe(this.logs[i])) return false;
        }
        return true
    }
}

class Time {
    constructor(t){
        this.hour = Math.floor(t / 100)
        this.min = t % 100
    }
    
    add(mins){
        this.min += mins
        if(this.min >= 60){
            this.hour++
            this.min -= 60
        }
    }
    
    isSafe(newT){
        if(newT.hour > this.hour) return false
        else if(newT.hour == this.hour) {
            if(newT.min > this.min) return false
            return true
        }
        return true
    }
}

 

문제를 풀면서 사실 ... Time의 add()에서 고민을 했다. 뭔가 직관적인 코드는 맞는데, .... 좀 아쉬움이 남는다. 

그리고 호닥닥 풀다 보니 어쩔 수 없이 쓰긴 했지만

temp를 변수명으로 쓰는 걸 정말 안 좋아하는데!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

마땅한 단어가 떠오르지 않았다. 반복문 돌면서 한 번 만들어서 체크하고 버리는 변수라서 ........ ..... 

근데 뭐 이걸로 따지고 들어갈 것 같으면 애초에 반복문에 i는 왜 쓰고 (iterator라는 걸 알긴 하지만, 그 뒤에 j 나오고 k 나오는 게 ㅋㅋㅋ...)

ㅋㅋㅋㅋㅋㅋㅋㅋ

아 ..... 지금보니 저거 아니어도 변수명이 조금씩 잘못된 게 많네

 

 

자바와 자바스크립트를 왔다갔다하며 코테를 풀다 보면 걍 책상을 팍팍 치면서

아~~~이거 왜 안 돼 ㅠㅠ 하는 순간이 종종 오는데 ㅋㅋㅋ

JS로 풀다 보면 ... 아 왜 타입 없어 ~~ 이러고(타입 없어서 궁여지책으로 클래스 쓰는 것 ㅋㅋ)

Java로 풀다 보면 ... 아 왜 호이스팅 없어 ~~ 이런다 ㅋㅋㅋㅋㅋ

 

징징거릴 시간에 실력을 더 키우도록 하자. 

 
정확성 테스트
테스트 1 통과 (0.15ms, 33.6MB)
테스트 2 통과 (0.18ms, 33.6MB)
테스트 3 통과 (0.18ms, 33.7MB)
테스트 4 통과 (0.15ms, 33.6MB)
테스트 5 통과 (0.14ms, 33.6MB)
테스트 6 통과 (0.15ms, 33.6MB)
테스트 7 통과 (3.57ms, 37.4MB)
테스트 8 통과 (3.58ms, 37.4MB)
테스트 9 통과 (4.13ms, 37.3MB)
테스트 10 통과 (3.81ms, 37.4MB)
테스트 11 통과 (3.93ms, 37.3MB)
테스트 12 통과 (4.34ms, 37.3MB)
테스트 13 통과 (3.78ms, 37.4MB)
테스트 14 통과 (3.73ms, 37.4MB)
테스트 15 통과 (4.00ms, 37.3MB)
테스트 16 통과 (3.59ms, 37.3MB)
테스트 17 통과 (3.69ms, 37.3MB)
테스트 18 통과 (4.11ms, 37.4MB)
테스트 19 통과 (3.87ms, 37.3MB)
테스트 20 통과 (4.34ms, 37.6MB)
테스트 21 통과 (3.85ms, 37.4MB)
테스트 22 통과 (4.49ms, 37.4MB)
테스트 23 통과 (4.96ms, 37.3MB)
테스트 24 통과 (3.94ms, 37.4MB)
테스트 25 통과 (0.30ms, 33.7MB)
테스트 26 통과 (0.35ms, 33.7MB)
테스트 27 통과 (0.31ms, 33.7MB)
테스트 28 통과 (1.88ms, 36.6MB)
테스트 29 통과 (1.93ms, 36.5MB)
테스트 30 통과 (1.10ms, 34MB)
테스트 31 통과 (1.88ms, 36.5MB)
테스트 32 통과 (1.89ms, 36.5MB)
테스트 33 통과 (3.60ms, 37.6MB)
테스트 34 통과 (4.07ms, 37.3MB)
테스트 35 통과 (3.76ms, 37.4MB)
테스트 36 통과 (3.91ms, 37.6MB)
테스트 37 통과 (2.15ms, 36.6MB)
테스트 38 통과 (1.89ms, 36.5MB)
테스트 39 통과 (3.95ms, 37.4MB)
테스트 40 통과 (3.85ms, 37.3MB)
테스트 41 통과 (4.00ms, 37.4MB)
테스트 42 통과 (4.00ms, 37.3MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0

댓글