문제 공유 : https://school.programmers.co.kr/learn/courses/30/lessons/388351
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[ 문제 설명 ]
프로그래머스 사이트를 운영하는 그렙에서는 재택근무와 함께 출근 희망 시각을 자유롭게 정하는 유연근무제를 시행하고 있습니다. 제도 정착을 위해 오늘부터 일주일 동안 각자 설정한 출근 희망 시각에 늦지 않고 출근한 직원들에게 상품을 주는 이벤트를 진행하려고 합니다.
직원들은 일주일동안 자신이 설정한 출근 희망 시각 + 10분까지 어플로 출근해야 합니다. 예를 들어 출근 희망 시각이 9시 58분인 직원은 10시 8분까지 출근해야 합니다. 단, 토요일, 일요일의 출근 시각은 이벤트에 영향을 끼치지 않습니다. 직원들은 매일 한 번씩만 어플로 출근하고, 모든 시각은 시에 100을 곱하고 분을 더한 정수로 표현됩니다. 예를 들어 10시 13분은 1013이 되고 9시 58분은 958이 됩니다.
당신은 직원들이 설정한 출근 희망 시각과 실제로 출근한 기록을 바탕으로 상품을 받을 직원이 몇 명인지 알고 싶습니다.
직원 n명이 설정한 출근 희망 시각을 담은 1차원 정수 배열 schedules, 직원들이 일주일 동안 출근한 시각을 담은 2차원 정수 배열 timelogs, 이벤트를 시작한 요일을 의미하는 정수 startday가 매개변수로 주어집니다. 이때 상품을 받을 직원의 수를 return 하도록 solution 함수를 완성해주세요.
[ 풀이 설명 ]
개인적으로 제일 친숙한 python 코드를 이용하여 풀이를 진행.
주말 조건 (토,일 제외) , 시간 변경 (+10분이 60분을 넘어가면 1시간으로 변경) 에 대해서 신경을 쓰면서 코드를 짜서 어렵지 않게 할 수 있었고, timelogs 가 2차 행렬로 되어있어서 어쩔 수없이 이중 반복문을 사용했다.
또한 시작하는 요일이 언제로 될 지 알 수없어서 일요일 이후에는 월요일로 초기화를 해줘야 하기에 초기화를 하는 조건문을 추가했다.
함정)
startday 인자를 요일 계산 할 때, 그대로 startday 변수에 증감하면서 사용했더니, 10%의 정답율이 계속 나와서 당황했었다.
여러 사람이 1개의 배열인 schedules에 있기에, 다른 변수를 이용해서 로직을 돌렸어야 했다.
[ 제출한 정답 코드 ]
def solution(schedules, timelogs, startday):
answer = 0
for i , person in enumerate(schedules) :
weekday = startday
for j,t in enumerate(timelogs[i]):
# 주말은 제외 (SAT:6 , SUN:7)
if weekday < 6 :
# 출근 설정시간의 +10분까지 가능하지만 60분 넘어가면 시로 변경필요
if (person%100)+10 >= 60 :
# 시/분 따로 계산하여 재조합
change_p = (((person//100)+1)*100)+(((person%100)+10)-60)
else :
change_p = person+10
# 출근시간이 설정시간 +10분 보다 크면 해당 사람은 이벤트에서 제외
if t > change_p :
break
# timelogs 의 크기는 7 고정 조건있었음. / 마지막날까지 다 통과했다면 이벤트 명 수 추가
if j==6 :
answer +=1
weekday +=1
# 일요일 이후에 월요일로 변경
if (weekday ==8):
weekday = 1
return answer
[ 후기 ]
[2025 프로그래머스 코드챌린지 1차 예선]의 level1 난이도라서 큰 문제가 없을 줄 알았는데, 함정이 있어서 당황했다.
문제 요구사항에 맞게 조건을 잘 생각하면서 흐름을 파악한 후에 코드를 짜야지 금방 결과가 도출되는 것 같다.
'코드문제풀이' 카테고리의 다른 글
| [ 프로그래머스 ] 멸종위기의 대장균 찾기 (MYSQL) (0) | 2025.10.13 |
|---|---|
| [ 프로그래머스 ] 상품을 구매한 회원 비율 구하기 (MYSQL) (0) | 2025.09.25 |
| [ 프로그래머스 ] 특정기간동안 대여 가능한 자동차들의 대여비용 구하기 (ORACLE) (0) | 2025.02.20 |
| [Baekjoon 1032] 명령 프롬프트 (python) (0) | 2021.06.13 |
| [Baekjoon 2839] 설탕 배달 (python) (0) | 2021.06.12 |