Test

[Python] 프로그래머스 코딩테스트 입문 Lv.0 문제 모음 (2)

루루23 2024. 10. 21. 14:52
반응형

1. 짝수의 합

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정수 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. 중복된 숫자 개수

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정수가 담긴 배열 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. 머쓱이보다 키 큰 사람

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 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. 중앙값 구하기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 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. 배열의 평균값

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.
제한사항> 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.
def solution(numbers):
    return sum(numbers)/len(numbers)

 

6. 짝수는 싫어요

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.
def solution(n):
    return [i for i in range(1,n+1) if i % 2 == 1]

 

 

7. 최빈값 구하기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 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)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 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)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 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)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
def solution(slice, n):
    return (n + slice - 1) // slice

 

피자 나눠 먹기 1번 문제에서 7이 slice로만 바뀐 간단한 문제였습니다 :p

이렇게 10개 풀기 완료 ~

반응형