프로그래머스발행일 2025. 6. 24.원본 https://blog.naver.com/jword_/223909747859 ↗

modular 연산 활용하기

modular 연산 활용하기 — #모듈러연산 #mod #코딩테스트 #modular연산 사용된 언어: 코틀린, 혹은 파이썬 순서: 로직, 코드 구현, 코...

#프로그래머스#Naver Blog

#모듈러연산 #mod #코딩테스트 #modular연산

​

​

  • 사용된 언어: 코틀린, 혹은 파이썬
  • 순서: 로직, 코드 구현, 코드 분석

modular연산

프로그래머스 - 2025 프로그래머스 코드 챌린지 1차 예선 - 유연근무제

이미지

[코딩테스트 연습 - 유연근무제
알고리즘 문제 연습 카카오톡 친구해요! 프로그래머스 교육 카카오 채널을 만들었어요. 여기를 눌러, 친구 추가를 해주세요. 신규 교육 과정 소식은 물론 다양한 이벤트 소식을 가장 먼저 알려드립니다.
school.programmers.co.kr](https://school.programmers.co.kr/learn/courses/30/lessons/388351#)

text 코드 예제
                                    ✍️ 문제 구현은 단순하다. modular연산에 익숙하다면 빨리 풀 수 있다.

🖌️ modular연산?
나머지 연산이다.

5 mod 3 = 2

👉 기억하면 좋은 특징들
1. 0 ≤ (a mod m) <m

2. 분배법칙
   (a + b) mod m = ((a mod m) + (b mod m)) mod m
   (a x b) mod m = ((a mod m) x (b mod m)) mod m
3. 뺄셈과 음수 처리
   (a - b) mod m = ((a mod m) - (b mod m) + m) mod m
   👉 음수가 나올 경우에 +m을 더한 뒤 다시 모듈로 취하면 1의 범위로 변환
4. 결합 법칙
   ((a mod m) mod m) = (a mod m)
5. 주기성
   (a + km) mod = a mod m

좌표측 변환

D∈{1,2,…,7} 인 상황에서 start를 특정 요일의 새로운 0번으로 삼고 싶다면 D에서 start를 빼면 된다.

예를들어 D = 3은 수요일이다. D에서 start = 3을 빼주면 수요일이 0번이되며, 4 - 3 = 1이 목요일이 된다.다른 모든 요일은 그에 따라 index가 조정된다.

​

월요일이나 화요일의 경우 D - start를 하면 -2, -1이 되는데 음수의 나머지는 언어마다 다르다. 정확성을 위해 + 7을 해주면 5, 6으로 제대로 된 인덱스가 설정된다.

​

+7을 하는 경우 월요일 부터 index가 5, 6, 7, 8, 9, 10, 11 이된다. 이를 mod 7을 해주면 올바른 인덱스가 설정됨.

​

기준점을 변환하는 것이 좌표측 변환과 유사하다.

​

정답 코드

python 코드 예제
                                    def solution(schedules, timelogs, startday):
    answer = 0

    # need adjust 759 -> 809
    deadlines = [time + 10 for time in schedules]
    adjusted = []

    for dl in deadlines:
        if dl % 100 > 59:
            hour = dl // 100 + 1
            minute = dl % 10

            adjusted.append(hour * 100 + minute)
        else:
            adjusted.append(dl)

    R = len(timelogs)
    C = 7

    sat = (6 - startday + 7) % 7
    sun = (7 - startday + 7) % 7

    for i in range(R):
        gift = True
        for j in range(C):
            # check
            if j == sat or j == sun:
                continue
            if timelogs[i][j] > adjusted[i]:
                gift = False

        if gift:
            answer += 1

    return answer
  • 이런 시간 문제는 항상 59분을 신경쓰자.
  • 769 -> 809로 잘 처리해주기

​

  • 시간복잡도 : O(n)

코드 줄이기

python 코드 예제
                                    deadlines = [time + 10 for time in schedules]
    adjusted = []

    for dl in deadlines:
        if dl % 100 > 59:
            hour = dl // 100 + 1
            minute = dl % 10

            adjusted.append(hour * 100 + minute)
        else:
            adjusted.append(dl)

이 부분을 python 연산을 사용하면 줄일 수 있을 것 같다.

python 코드 예제
                                    adjusted = [dl + 40 if dl % 100 > 59 else dl
            for dl in (t + 10 for t in schedules)]

​