IT/코딩테스트

2023 KAKAO BLIND RECRUITMENT 문제 풀이

KimCookieYa 2023. 6. 30. 12:12

초고

일시: 2023년 6월 29일 15:20~17:00
문제: 프로그래머스 기출문제 모음
사용 언어: Python3
결과: 2 정답 / 7 문제

 

2023 현대모비스 알고리즘 경진대회를 대비하고자, 2023 카카오 채용 코딩테스트 기출 문제를 풀었다. 프로그래머스에 카카오 기출문제가 잘 정리되어 있다. 카카오 코딩테스트는 입력을 변수로 넘겨주기 때문에 입력에 대해서는 신경쓸 필요가 없다. 대신 데이터를 쓰기 쉽게 전처리를 할 필요가 있다.

 

1. 개인정보 수집 유효기간

def check_day(today, prev, s):
    today = today.split('.')
    year1 = int(today[0])
    month1 = int(today[1])
    day1 = int(today[2])

    prev = prev.split('.')
    year2 = int(prev[0])
    month2 = int(prev[1])
    day2 = int(prev[2])

    result1 = year1 * 12 * 28 + month1 * 28 + day1
    result2 = year2 * 12 * 28 + month2 * 28 + day2

    return True if result1 >= result2 + s * 28 else False

def solution(today, terms, privacies):
    answer = []

    db = dict()
    for term in terms:
        k, v = term.split()
        db[k] = int(v)

    info_db = []
    for privacie in privacies:
        k, v = privacie.split()
        info_db.append((k, v))

    for idx, info in enumerate(info_db):
        if check_day(today, info[0], db[info[1]]):
            answer.append(idx+1)

    return answer
  • 프로그래머스 난이도 1
  • 지문이 길어서 읽기 싫고 어려울 것 같지만, 쉽다
  • 문자열로 입력된 날짜를 비교해주면 된다.
  • 이모티콘 타입 정보를 O(1)에 탐색할 수 있도록 dictionary로 바꿔준다.
  • Python에는 Date 타입이 존재하지만, 문자열로 처리하는 편이 훨씬 간단하다.
  • 문자 '.'을 기준으로 split을 수행하고 각 데이터 요소를 int로 바꿔준다.
  • 계산의 편의를 위해 Year, Month, Date를 모두 더한다.
    • 유효기간을 더한 후, 파기 여부를 확인한다.

 

2. 이모티콘 할인행사

from itertools import product

def solution(users, emoticons):
    answer = [0, 0]
    temp = min(users)[0]
    if temp % 10 > 0:
        temp = (temp // 10 + 1) * 10

    n = len(emoticons)
    lsts = list(product(list(range(temp, 50, 10)), repeat=n))

    for lst in lsts:
        answer_temp = [0, 0]
        for flag, limit in users:
            result = 0
            for i in range(n):
                if lst[i] >= flag:
                    result += (emoticons[i] * (100 - lst[i])) // 100
            if result >= limit:
                answer_temp[0] += 1
            else:
                answer_temp[1] += result

        if answer[0] < answer_temp[0] or (answer[0] == answer_temp[0] and answer[1] < answer_temp[1]):
            answer = answer_temp[:]
    return answer
  • 프로그래머스 난이도 2
  • 지문이 길고 이해하기도 힘들다. 그래도 문제만 이해하면 푸는 것은 어렵지 않은 편이다.
  • 각 이모티콘 별 할인율에 대해 완전탐색을 돌면 된다.
    • 이모티콘의 개수가 m <= 7이기 때문에 완전탐색 시, 최대 4^7번까지 돌기 때문에 완전탐색으로 해결할 수 있다!
  • 나는 product 함수를 사용해서 완전탐색 조합을 구했지만 재귀로도 풀 수 있다.