[프로그래머스][Python][Lv0] 코딩테스트 입문 (1)
1. 옷가게 할인 받기
머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.
def solution(price):
discount_rates = {500000: 0.8, 300000: 0.9, 100000: 0.95, 0: 1}
for discount_price, discount_rate in discount_rates.items():
if price >= discount_price:
return int(price * discount_rate)
각 비율을 dictionary 형태로 key-value로 묶은 다음, for문을 돌려 할인이 되는 기준 가격과 비율을 변수에 저장한다.
만약 가격이 특정 할인 기준가보다 높거나 같다면, 그 비율을 곱하여 할인된 가격을 구한다.
2. 피자 나눠 먹기 (3)
머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수
slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때,
n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
def solution(slice, n):
d, m = divmod(n, slice)
return d + int(m != 0)
n명의 사람이 최소 한조각 이상의 피자를 먹으려면, 사람 수 나누기 피자조각을 했을 때, 나머지가 0이 아닌 경우 1판을 더 추가해야한다.
divmod를 사용하면 몫과 나머지가 각각 d, m에 저장되고, 나머지가 0이 아닐 경우, 나머지를 정수로 변환하여 추가해준다.
def solution(slice, n):
return (n - 1) // slice + 1
n=slice 일 때 결과값이 기댓값보다 무조건 1 높게 나오기 때문에, n-1을 해준다
또한 n-1//slice < 1일 때, 결과 값이 0이 되기때문에 slice + 1 을 해준다.
3. 배열의 유사도
두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열
s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.
def solution(s1, s2):
return len([i for i in s1 if i in s2])
s1 배열에서 s2에 속한 요소만 리스트 컴프리헨션으로 리스트를 생성한 다.
생성된 리스트의 길이가 곧 같은 원소의 개수이기 때문에 len을 통해 리스트의 길이를 반환한다.
4. 점의 위치 구하기
사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.
x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.
x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.
import numpy as np
def solution(dot):
dot = np.sign(dot)
if sum(dot) == 2:
return 1
elif sum(dot) == -2:
return 3
elif sum(dot) == 0:
return 2 if dot[0] < 0 else 4
def solution(dot):
quad = [(3,2),(4,1)]
return quad[dot[0] > 0][dot[1] > 0]
True는 1을 반환하고 False는 0을 반환하기 때문에 이를 이용하여 풀이를 한 방식이다.
[0][0] : 3사분면 (모두 음수, 즉 모두 False)
[0][1] : 2사분면 (x좌표가 음수, y좌표는 양수)
[1][0] : 4사분면 (x좌표가 양수, y좌표는 음수)
[1][1] : 1사분면 (모두 양수, 즉 모두 True)
인덱스에 맞는 2차원 배열을 만들어 매핑 후 조건에 맞는 숫자를 반환한다.
5. 짝수 홀수 개수
정수가 담긴 리스트 num_list가 주어질 때,
num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.
def solution(num_list):
answer = [0,0]
for n in num_list:
answer[n%2]+=1
return answer
answer을 [0,0]으로 초기화 했을 때 answer[0]이 짝수의 개수 answer[1]이 홀수의 개수를 담는 인덱스의 자리가 된다.
n%2가 0이면 짝수 n%2이 1이면 홀수가 되기때문에 answer[n%2] += 1을 하면 짝수,홀수의 개수가 카운팅된다.
6. 순서쌍의 개수
순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수
n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.
def solution(n):
return len([i for i in range(1, n+1) if n % i == 0])
순서쌍의 개수 == n의 약수의 개수
7. 숨어있는 숫자의 덧셈 (1)
문자열 my_string이 매개변수로 주어집니다.
my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
import re
def solution(my_string):
numbers = re.sub(r'[^0-9]', '', my_string)
return sum(list(map(int, numbers)))
re 정규 표현식을 이용해 숫자만 문자열로 분리한다.
이때 map을 이용해 numbers의 요소를 int로 변환하여 list로 변환한 후, sum으로 리스트의 총합을 구한다.
8. 제곱수 판별하기
어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수
n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.
import math
def solution(n):
x = math.sqrt(n)
return 1 if x%1 == 0 else 2
math 라이브러리의 sqrt 함수는 n의 제곱근을 구한다.
n이 정수라면 제곱수고 아니면 소수점형태로 떨어지기 때문에, 이를 이용해서 조건에 맞는 수를 반환한다.
9. 개미 군단
개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.
def solution(hp):
return hp // 5 + (hp % 5 // 3) + ((hp % 5) % 3)
hp를 5로 나눈 몫 (장군 개미의 병력) + hp를 5로 나눈후의 나머지를 3으로 나눈 몫 (병정 개미의 병력) +
hp를 5로 나눈후의 나머지를 3으로 나눈 나머지 (일개미의 병력)
10. 최댓값 만들기(2)
정수 배열 numbers가 매개변수로 주어집니다.
numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
ex) [1, 2, -3, 4, -5] ==> result : 15
[0, -31, 24, 10, 1, 9] ==> result: 240
def solution(numbers):
numbers = sorted(numbers)
return max(numbers[0] * numbers[1], numbers[-1]*numbers[-2])
오름차순으로 정렬을 하면 음수중에서 가장 큰수가 앞으로 오게된다. ex) [1,2,-3,4,-5] ==> [-5,-3,1,2,4]
리스트 요소의 두 수의 곱중의 최댓값은 결국,
음수끼리의 곱중에 가장 큰 값 ([0] * [1]) OR 양수 끼리의 곱중 가장 큰 값이 되기 때문에 ([-1] * [-2]),
max를 이용해 둘 중 더 큰 값을 반환한다.
'🧾 Codetest > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Python][Lv0] 코딩테스트 입문 (3) (0) | 2023.09.05 |
---|---|
[프로그래머스][Python][Lv0] 코딩테스트 입문 (2) (0) | 2023.09.04 |
[프로그래머스][Python][Lv0] 코딩 기초 트레이닝 (3) (1) | 2023.08.28 |
[프로그래머스][Python][Lv0] 코딩 기초 트레이닝 (2) (0) | 2023.08.20 |
[프로그래머스][Python][Lv0] 코딩 기초 트레이닝 (1) (0) | 2023.07.27 |