728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/120815
내 풀이
def solution(n):
if n%6 == 0:
return n//6
else:
for i in range(6):
if (n * (i+1)) % 6 == 0:
return n * (i+1) // 6
자세한 설명을 주석과 함께 작성해보았다.
def solution(n):
answer = 0
# 사람 * 먹은 조각 = 6 * 피자개수
# 즉, n * 먹은 조각(a) = 6 * answer
# answer = n * a / 6
# 먹은 조각 개수의 범위: 1~6
"""
이유:
사람 7명이면..
7명이 1조각씩 -> 총 7조각(6의 배수 X)
7명이 2조각씩 -> 총 14조각(6의 배수 X)
7명이 3조각씩 -> 총 21조각(6의 배수 X)
7명이 4조각씩 -> 총 28조각(6의 배수 X)
7명이 5조각씩 -> 총 35조각(6의 배수 X)
7명이 6조각씩 -> 총 42조각(6의 배수)
7명이 7조각씩 -> 총 49조각(6의 배수 X)
...
==> 6조각 이후로는 반복만이 진행됨
"""
def solution(n):
if n%6 == 0:
return n//6
else:
for i in range(6):
if (n * (i+1)) % 6 == 0:
return n * (i+1) // 6
"""
n의 값이 4일 때, i+1은 3, n * (i+1) // 6 은 2가 됨
"""
다른 사람 풀이
def solution(n):
answer = 1
while answer * 6 % n != 0:
answer += 1
return answer
while 문을 이용한 풀이가 눈에 띄었다.
피자 개수를 answer로 두고, 6조각을 곱한 후, n으로 나눴을 때 0인지 아닌지를 판단한다.
이때, 0이 아니면 while문을 실행하고, 0이 아니면 while문에서 벗어난다.
answer이 0이면 처음부터 0이기 때문에 첫 answer 값은 1로 지정한다.
import math
def solution(n):
return (n * 6) // math.gcd(n, 6) // 6
간결하게 math 라이브러리를 사용해 최소공배수를 이용해서 푼 사람의 코드이다.
gcd는 최대 공약수를 구하는 함수이다.
느낀점
뒤로 갈수록 문제가 어려워지는 듯한 느낌이다. 분명 단순한 문제같은데 막상 풀이를 코드로 작성하려면 복잡해지게 푸는 듯하다. 문제를 단순하게 보고 단순한 로직으로 푸는 방법을 연구해봐야겠다.
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 영어가 싫어요 (0) | 2024.02.29 |
---|---|
[프로그래머스][PYTHON] Lv. 0 2차원으로 만들기 (0) | 2024.02.29 |
[프로그래머스][PYTHON] Lv. 0 최빈값 구하기 (0) | 2024.02.23 |
[프로그래머스][PYTHON] Lv. 0 중앙값 구하기 (0) | 2024.02.22 |
[프로그래머스][PYTHON] Lv. 0 분수의 덧셈 (0) | 2024.02.22 |