Programming/코딩테스트

코딩 테스트 입문: 치킨 쿠폰 / summer,winter coding: 예산 / 연습문제: 문자열 다루기 기본

알파고라니 2023. 4. 13. 22:32

https://school.programmers.co.kr/learn/courses/30/lessons/120884

 

프로그래머스

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

programmers.co.kr

https://school.programmers.co.kr/learn/courses/30/lessons/12982

 

프로그래머스

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

programmers.co.kr

https://school.programmers.co.kr/learn/courses/30/lessons/12918

 

프로그래머스

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

programmers.co.kr

 

꾸준함이 중요한데 오랫동안 코딩 테스트 문제를 풀지 않아 후회하면서 풀었다..

파이썬 언어를 사용했다.

 

1. 치킨 쿠폰

문제 설명:

프로그래머스 치킨은 치킨을 시켜 먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜 먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return 하도록 solution 함수를 완성해 주세요.

 

100마리를 시키면 총 몇 마리를 먹을까? 100마리를 시키면 100마리를 먹고 10개의 쿠폰이 생겨서 1마리를 더 먹을 수 있다.

따라서 총 101마리.

지금까지 먹은 치킨 수와 쿠폰 수를 변수로 만들어 계산해서 더했다.

def solution(chicken):
    answer = 0
    coupon = chicken
    while coupon >= 10:
        service = coupon // 10 
        answer += service
        coupon = coupon % 10 + service 
    return answer

 

 

2. 예산

문제 설명: 

S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해 주세요.

 

각 부서가 필요한 예산을 전달받으면 리스트를 올림차순 정렬을 한다. 그 후 총예산과 작은 순서대로 빼면 가장 많은 부서에게 지원할 수 있을 것이다.라는 생각으로 코드를 짜봤다.

def solution(d, budget):
    answer = 0
    d.sort()
    for i in d:
        if budget >= i:
            budget -= i
            answer += 1
    return answer

 

 

3. 문자열 다루기 기본

문제 설명:

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼 있는지 확인해 주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

 

더욱 간결하는 방법이 있겠지만 모르겠고 그냥 하라는 대로 했다..

처음에는 4 혹은 6의 문자열 길이를 고려하지 않아서 테스트 케이스에서 오답이 있어서 알기 전까진 너무 화난 문제..

def solution(s):
    answer = True
    if len(s) != 4 and len(s) != 6:
        answer = False
    for i in s:
        if not i in '0123456789':
            answer = False
    return answer

 

앞으로 갈 길이 멀다!