[프로그래머스] Level 1 유연근무제 - 2025 프로그래머스 코드챌린지 1차 예선 (Javascript, Python3)

Jun·2025년 3월 2일

알고리즘

목록 보기
8/19

문제 링크

바로가기

문제 풀이

JS

function solution(schedules, timelogs, startday) {
  let answer = 0;

  timelogs.map((timelog, idx) => {
    let flag = true,
      day = startday - 1;

    for (const table of timelog) {
      day++;
      if (day === 6 || day === 7) continue;

      const tHour = Math.floor(Number(table) / 100),
        tMinute = Number(table) % 100;
      const sHour = Math.floor(Number(schedules[idx]) / 100),
        sMinute = Number(schedules[idx] % 100);
      const diff = (tHour - sHour) * 60 + (tMinute - sMinute);
      if (diff > 10) flag = false;

      if (day > 7) day = 1;
    }
    if (flag) answer++;
  });
  return answer;
}

PY

def solution(schedules, timelogs, startday):
    answer = 0
    
    def convertTime(time):
        h = time // 100
        m = time % 100
        return h * 60 + m
    
    for idx, timelog in enumerate(timelogs):
        s = startday - 1
        flag = True
        for table in timelog:
            s += 1
            if s in [6, 7]:
                continue
            elif s > 7:
                s = 1
                
            if convertTime(table) - convertTime(schedules[idx]) > 10:
                flag = False
        
        if flag:
            answer += 1
    return answer

풀이

구현 문제였는데 실수한 부분이 나눗셈을 할 때 소수부를 신경쓰지 않았던 점이다.
이 부분 때문에 시간이 지체됐다.
조금 더 계산할 때 신경써주어야할 것 같다.

새롭게 배운 점

  1. 파이썬에서 나눗셈을 할 때 / 이면 소수부까지 // 이면 정수부에 대한 몫만 구하는 것

  2. enumerate를 통해 value, idx를 한 번에 받아올 수 있다.

  3. 파이썬에서는 in 배열을 통해서 쉽게 포함되어있는지 확인할 수 있다.

profile
2D | 3D 프론트엔드 개발자

0개의 댓글