반응형
1. 짝수의 합
정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.
def solution(n):
answer = 0
for i in range(1, n+1):
if i%2 == 0:
answer += i
return answer
간단한 풀이
def solution(n):
return sum(range(2, n+1, 2))
2. 중복된 숫자 개수
정수가 담긴 배열 array와 정수 n이 매개변수로 주어질 때, array에 n이 몇 개 있는 지를 return 하도록 solution 함수를 완성해보세요.
def solution(array, n):
return len([i for i in array if i==n])
그리고 이렇게 푼 나를 비웃는 듯한 다른 풀이
list.count(value) : list에 value가 몇 개 있는지 셀 수 있는.. 정확히 이 문제가 묻는 것
def solution(array, n):
return array.count(n)
3. 머쓱이보다 키 큰 사람
머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 return 하도록 solution 함수를 완성해보세요.
앞문제를 풀고 바로 풀어서 같은 방법으로 해결
def solution(array, height):
return len([i for i in array if i > height])
또 다른 풀이
def solution(array, height):
return sum(1 for a in array if a > height)
4. 중앙값 구하기
중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.
def solution(array):
array.sort()
if l % 2 == 1:
return array[(len(array)//2]
else:
return (array[len(array)//2-1]+[len(array)//2])/2
하지만
제한 사항에 배열이 홀수라는 얘기가 있었기 때문에
그래서 더 간결한 풀이는
def solution(array):
return sorted(array)[len(array)//2]
5. 배열의 평균값
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.
제한사항> 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.
def solution(numbers):
return sum(numbers)/len(numbers)
6. 짝수는 싫어요
정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.
def solution(n):
return [i for i in range(1,n+1) if i % 2 == 1]
7. 최빈값 구하기
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
처음 생각한 방법은 리스트를 돌며 더 많이 나온 값을 찾으면 최빈값을 바꿔주는 것
처음에 set(array)를 생각못하고 계속 틀렸다..
def solution(array):
max_freq = 0
for i in set(array):
if max_freq < array.count(i):
max_freq = array.count(i)
answer = i
elif max_freq == array.count(i):
answer = -1
return answer
그리고 전체 값들의 빈도를 센 풀이
def solution(array):
freqs = {}
for i in set(array):
freqs[i] = array.count(i)
max_freq = max(freqs.values())
max_list = [key for key, value in freqs.items() if value == max_freq]
if len(max_list) > 1:
return -1
else:
return max_list[0]
8. 피자 나눠 먹기 (1)
머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.
def solution(n):
return n//7 if n%7 == 0 else n//7+1
하지만 간단한 풀이는 이것..
def solution(n):
return (n + 6) // 7
9. 피자 나눠 먹기 (2)
머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
def solution(n):
for i in range (1, n+1):
if 6*i % n == 0:
return i
다른 분들의 풀이 중 처음에 이해가 안가서 찾아봤다.
* a = bq + r 이라고 했을 때 d가 a와 b의 공약수라면 r의 공약수도 된다.
그리고 최소공배수는 두 수의 곱을 최대공약수로 나눈 것과 같기 때문에,
결론적으로 while 문 안에서 최대공약수를 찾고, 이를 6*n으로 나눠서 최소공배수를 찾은 다음,
이를 6으로 다시 나누면 구하고자 하는 피자 판수가 된다.
def solution(n):
a, b = 6, n
while b != 0:
a, b = b, a % b
return (6 * n) // a // 6
그리고 어차피 6과 어떤 수의 최대공약수는 [1, 2, 3, 6] 중에 존재하므로, 아래와 같이 작성할 수도 있다.
def solution(n):
return [n // k for k in [1,2,3,6] if n%k == 0][-1]
물론 math 라이브러리를 이용할 수도 있다 ~
10. 피자 나눠 먹기 (3)
머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
def solution(slice, n):
return (n + slice - 1) // slice
피자 나눠 먹기 1번 문제에서 7이 slice로만 바뀐 간단한 문제였습니다 :p
이렇게 10개 풀기 완료 ~
반응형
'Test' 카테고리의 다른 글
[MySQL] 프로그래머스 《그룹별 조건에 맞는 식당 목록 출력하기》 (0) | 2024.10.29 |
---|---|
[MySQL] 그룹 스터디 2일 차 (10/21) (2) | 2024.10.22 |
[MySQL] HackerRank 《Weather Observation Station》 1~20 (0) | 2024.10.19 |
[Python] 프로그래머스 코딩테스트 입문 Lv.0 문제 모음 (1) (1) | 2024.10.18 |
[MySQL] 그룹 스터디 1일 차 (10/16) (0) | 2024.10.16 |