1. 피자 나눠먹기1 : 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return
[나의 풀이 ]
def solution(n):
answer = 0
a = n // 7
b = n % 7
if n <= 7: 사람 수가 7 이하이면 피자는 1판
answer = 1
elif b == 0 : 사람수가 7로 나눠떨어지면 피자는 (사람 수를 7로 나눈값)판
answer = a
else : answer = a + 1 사람수가 7로 나눠떨어지지않으면 (사람수를 7로 나눈값 + 1) 판
return answer
[나의 다른 풀이]
def solution(n):
x = 0
while x * 7 // n < 1: 피자 조각수 를 사람 수로 나눈 몫이 1 이상이 될때까지 피자 수 +1 반복
x += 1
return x
[다른 풀이]
(1)
def solution(n):
return (n-1) // 7 + 1 (사람 수 - 1 )* 를 7로 나눈 값 +1 판
* 7의 배수를 나눴을때의 출력값을 정확히 받을수 있다.
(2)
def solution(n):
return (n + 6) // 7
(3)
import math
def solution(n):
return math.ceil(n / 7)
math.ceil() : 주어진 숫자를 올림 하여 정수 반환
(4)
def solution(n):
return -(-n // 7)
// 는 소수점을 버림 = 내림 (ex. -1 // 7 = - 0.14 -> -1로 반환)
n의 음수값을 7로 나누고 내림 수행
다시 음수로 바꿈으로써 올림 효과
2. 피자 나눠먹기 2 : 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때,
n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return
[나의 풀이 ]
def solution(n):
pizza = 1
for pizza in range(1, n + 1): 피자 판의 수 1~ n 까지
if (pizza * 6) % n != 0: 피자 조각 수 를 사람수로 나눈 나머지가 0이 아니면 피자 + 1
pizza += 1
else :
break
return pizza
[나의 다른 풀이]
def solution(n):
pizza = 1
while (pizza * 6) % n > 0: 피자 조각 수를 사람수로 나눈 나머지가 0 이상이면 피자+= 1
pizza += 1
return pizza
정해진 범위가 없이 무한히 증가시키고 싶을때는 while 이 더 적합하다.
for 반복문은 주로 정해진 범위나 이터러블 객체에서 반복하고싶을때 사용
[다른 풀이]
(1)
import math
def solution(n):
return (n * 6) // math.gcd(n, 6) // 6
최대공약수를 사용한 방법
3. 피자나눠먹기 3 : 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return
[나의 풀이 ]
def solution(slice, n):
x = 0
while (x * slice) // n < 1 : 전체 피자 조각 수 를 사람 수로 나눈 몫이 1보다 작으면 피자 한판ㄷ ㅓ~
x += 1
return x
[다른 풀이]
(1)
def solution (slice, n):
return ((n-1) // slice) +1
(2)
def solution(slice, n):
d, m = divmod(n, slice) n명을 slice 로 나눈 (몫, 나머지) 반환
return d + int(m != 0)
m != 0 조건문을 만족하면 True, 거짓이면 False 반환 , -> 이걸 다시 int 로 변환해서1 , 0을 받아낸다
나머지가 0이 아니면 1을 더한다
4. 배열의 평균값 :정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return
[나의 풀이 ]
def solution(numbers):
answer = 0
answer = sum(numbers) / len(numbers)
return answer
반복문으로 요소를받아와서 sum을 만들어줘야하나 하다가
메소드인지 함수인지도 모르겠어서 일단 다 써보니까 되긴 했다;;헷;
[다른 풀이]
(1)
import numpy as np
def solution(numbers):
return np.mean(numbers)
다들 넘파이는 사기야(최고야) 등 반응이 뜨겁네
ㅠ 난 떠올리지도 못함
(2)
import statistics
def solution(numbers):
answer = 0
return statistics.mean(numbers)
numpy 알아보기 : 다차원 배열에서 유용
import numpy as np
# 리스트를 배열로 변환
arr1 = np.array([1, 2, 3, 4, 5])
# 범위로 배열 생성
arr2 = np.arange(0, 10, 2) # 0부터 10 미만까지 2씩 증가하는 배열 생성: [0, 2, 4, 6, 8]
# 0으로 초기화된 배열 생성
arr3 = np.zeros((2, 3)) # 2x3 배열, 모든 요소는 0
# 1로 초기화된 배열 생성
arr4 = np.ones((3, 3)) # 3x3 배열, 모든 요소는 1
# 랜덤한 값으로 배열 생성
arr5 = np.random.rand(2, 2) # 2x2 배열, 랜덤한 값으로 채워짐
배열 연산
numpy를 사용하여 배열 간의 연산을 빠르고 효율적으로 수행할 수 있습니다:
import numpy as np
# 배열 연산
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 덧셈
c = a + b # [5, 7, 9]
# 곱셈
d = a * b # [4, 10, 18]
# 행렬 곱셈 (dot product)
e = np.dot(a, b) # 32
# 배열 요소 접근 및 슬라이싱
arr = np.array([[1, 2, 3], [4, 5, 6]]) => 2행 3열의 배열을 생성
# 요소 접근
print(arr[0, 1]) # 출력: 2 => [행, 열]로 접근
# 슬라이싱
print(arr[:, 1]) # 출력: [2, 5] => 모든 행에서 두번째 열 (1번 인덱스?) 값에 접근
수학 함수
numpy는 다양한 수학 함수를 제공하여 배열 데이터를 효율적으로 처리할 수 있습니다:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
# 평균
mean_val = np.mean(arr) # 3.0
# 최댓값, 최솟값
max_val = np.max(arr) # 5
min_val = np.min(arr) # 1
# 제곱근
sqrt_arr = np.sqrt(arr) # [1. 1.41421356 1.73205081 2. 2.23606798]
statistics 모듈 알아보기 ( Python 3.4 이상)
mean(): 주어진 데이터의 산술평균을 계산
median(): 주어진 데이터의 중앙값을 계산합니다. 데이터가 홀수개인 경우 중앙에 있는 값을 반환하고, 짝수개인 경우 중앙에 있는 두 값의 평균을 반환
stdev(): 주어진 데이터의 표준편차
variance(): 주어진 데이터의 분산
mode(): 주어진 데이터의 최빈값
harmonic_mean(): 주어진 데이터의 조화평균
'개발 공부 일지 > Python' 카테고리의 다른 글
프로그래머스 코딩테스트 입문 day6 : 문자열, 반복문, 출력, 배열, 조건문 (0) | 2024.07.02 |
---|---|
프로그래머스 코딩테스트 입문 day5 : 수학, 배열 (0) | 2024.07.02 |
파이썬 - 자릿수 지정하는 방법 (0) | 2024.06.22 |
프로그래머스 코딩테스트 입문 day3 : 사칙연산, 배열, 수학 (0) | 2024.06.22 |
파이썬 : 반복문(for, while) 사용해서 요소 순회하기 (0) | 2024.06.22 |