[프로그래머스][파이썬] 피자 나눠 먹기 (2) - 수학 (Level 0)

뻥튀기아이스크림·2025년 2월 26일
1
post-thumbnail

◽ 문제 출처

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

◽ 문제

◽ 입력 & 출력

◽ 내 풀이

import math
def lcm(n, m):
    return n // math.gcd(n, m) * m

def solution(n):
    answer = lcm(n, 6) // 6
    return answer
  • 사실 처음엔 lcm() 내장 함수를 처음에 써서 풀었지만 오답이 나왔다.
  • 프로그래머스 파이썬 버전이 3.8.5인데, 최소공배수를 반환해주는 lcm()3.9버전부터 지원한다고 한다.
  • 어떻게 최소공배수를 구해야할까 고민하다가 결국 구글링해서 푼 문제.. 저장해놓고 다시 풀자.
  • 최소공배수를 선택한 이유는 문제에서 힌트가 있다고 봤다. 같은 수의 피자를 먹기 위해 최소 몇 판.

◽ 다른 사람 풀이

def solution(n):
    answer = 1
    while (6 * answer) % n != 0:
        answer += 1
    return answer
  • 반복문을 보면 6 * answern으로 나누어 떨어질 때까지 반복한다.
  • 나누어 떨어지지 않다면 나누는 값인 n (사람)이 같은 양을 먹지 못한다는 뜻이다.
  • 같은 양을 먹지 못하면 answer (피자 판 수)를 늘려가며 다시 반복문으로 체크하는 풀이다.

◽ 더 나아가기

  • 파이썬을 사용하면서 너무 유용한 기능이 많아 계속 이런건 내장함수 있을만 한데.. 하며 문제에 접근했다. 구글링하지 못하는 코딩테스트 환경에서는 호되게 당하기 딱인 마인드다.
  • 아래 풀이처럼 조건을 코드로 구현할 수 있는 힘을 기르기 위해 다른 분들 풀이 분석도 꼼꼼히 해야겠다.
  • 참고) gcd() 함수의 시간 복잡도: O(logN)
  • https://www.quora.com/What-is-the-time-complexity-of-Euclids-GCD-algorithm



피드백은 언제나 환영입니다 :)

profile
성장하고 싶은 개발자

0개의 댓글