프로그래머스 - 유연근무제

TechN0·2025년 3월 25일

알고말고 알고리즘

목록 보기
16/22
post-thumbnail

문제

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


풀이

  • 직원 n명의 희망 출근 시간이 담긴 schedules

  • 직원들의 일주일 출근 시간 내역 2차원 배열 timelogs

  • 시작한 요일 startday (월, 화, 수, 목, 금, 토, 일 == 1, 2, 3, 4, 5, 6, 7)

  • 유저 수 n 만큼 반복해야 함

  • 직원 별로 타임 로그를 순회 해야 함

    • 지각 발생 시 탈출 해야 효율 올라감
  • 주말에는 지각 안잡으니 주말은 봐줘야 함

  • 현재 요일을 체크해서 7(일요일)이라면 다음날에는 1(월요일) 부터 시작되게 조건문 줘야함

  • 순회를 끝냈을 때 지각이 없었다면 count + 1

  • 유저별 순회 종료 후 count 값 리턴

35점 코드

def solution(schedules, timelogs, startday):
    n = len(schedules)
    cont = 0
    
    for i in range(n):
        # 현재 직원 출근 희망 시간
        WSTime = schedules[i]
        # 출근 인정 시간(+10)
        PSTime = WSTime + 10
        # 성공실패
        SS = True
        
        day = startday
        for j in timelogs[i]:
            # 평일일때만 진행
            if 1 <= day <= 5:
                if j >PSTime:ㅁ
                    SS = False
                    break  
            # 일주일 지나갔나 체크
            if day == 7:
                day = 1
            else:
                day += 1
            
        if SS:
            cont += 1
            
    return cont

# 시각 변환식: h시 m분 = h * 100 + m 

통과한 코드

def solution(schedules, timelogs, startday):
    def convert_time(time):
        h, m = divmod(time, 100)
        m += 10
        if m >= 60:
            h += 1
            m -= 60
        return h * 100 + m  # 올바른 출근 인정 시간 변환
    
    n = len(schedules)
    cont = 0  # 상품을 받을 직원 수
    
    for i in range(n):
        WSTime = schedules[i]  # 희망 출근 시간
        PSTime = convert_time(WSTime)  # 출근 인정 시간 변환
        is_success = True  
        
        day = startday  
        weekday_count = 0  # 평일 출근 횟수 카운트
        
        for j in timelogs[i]:
            if 1 <= day <= 5:  # 평일만 체크
                weekday_count += 1  
                if j > PSTime:  # 지각한 경우
                    is_success = False  
                    break  
            
            day = 1 if day == 7 else day + 1  # 요일 업데이트
            
            if weekday_count == 5:  # 평일 5일 확인 후 중단
                break
        
        if weekday_count < 5:  # 출근 기록이 부족하면 실패 처리
            is_success = False
        
        if is_success:
            cont += 1  
            
    
            
    return cont

0개의 댓글