카카오 코테 6

[프로그래머스] 메뉴 리뉴얼 - Python

해당 문제는 2021 KAKAO BLIND RECRUITMENT에서 출제된 문제다. 프로그래머스 기준 Level 2에 해당한다. 이번 문제는 combinations 함수와 Counter 함수를 사용하면 쉽게 해결이 가능하다. from itertools import combinations from collections import Counter def solution(orders, course): answer = [] for n in course: candidates = [] for menu in orders: for l in combinations(menu, n): candidates.append(''.join(sorted(l))) candidates = Counter(candidates).most_co..

Python/Algorithm 2023.09.05

[프로그래머스] 1차 다트 게임 - Python

해당 문제는 2018 KAKAO BLIND RECRUITMENT 에서 출제된 문제다. 프로그래머스 기준 Level 1에 해당한다. 다트를 던질 때 Single Double Triple 등을 유의하며, *, #에 해당하는 값도 처리하는 것이 관건이다. 첫 번째 풀이로 접근했을 때, 80% 정도 정답이 나왔다. def calculate(num, oper): if oper == 'S': return num ** 1 elif oper == 'D': return num ** 2 elif oper == 'T': return num ** 3 def solution(dartResult): score = [] for dr in dartResult: if dr.isnumeric(): n = int(dr) elif dr i..

Python/Algorithm 2023.09.03

[프로그래머스] 비밀지도 - Python

해당 문제는 2018 KAKAO BLIND RECRUITMENT에서 출제된 문제다. 프로그래머스 기준 Lvel 1에 해당하는 문제로 10진법을 2진법으로 변환하여 해결할 수 있다. def GetMap(arr1, arr2): answer = '' for a1, a2 in zip(arr1, arr2): if a1 == '0' and a2 == '0': answer += ' ' else: answer += '#' return answer def solution(n, arr1, arr2): answer = [] array1, array2 = [], [] for a1, a2 in zip(arr1, arr2): a1 = bin(a1)[2:].rjust(n, '0') a2 = bin(a2)[2:].rjust(n, '..

Python/Algorithm 2023.09.03

[프로그래머스] 이모티콘 할인행사 - Python

이번 문제는 2023 KAKAO BLIND RECRUITMENT 에서 출제된 문제다. 프로그래머스 기준 난이도 Level 2에 해당하는 문제로, 완전탐색(Brute-Force Search, BFS) 문제로 접근할 수 있다. 문제 설명 요약을 하자면, 카카오톡 이모티콘 플러스 서비스 가입자 수를 최대로 늘리는 것이 첫 번째 목적이고, 이모티콘 판매액을 최대한 늘리는 것이 두 번째 목적이다. n명의 카카오톡 사용자에게 m개의 이모티콘을 할인해서 판매하는데, 이때 할인율은 10%, 20%, 30%, 40% 중 하나로 설정된다. 각 할인율에 따라 목적1, 목적2를 달성하는 값을 출력하는 문제다. from itertools import product def solution(users, emoticons): emg..

Python/Algorithm 2023.09.02

[프로그래머스] 크레인 인형뽑기 게임 - Python

크레인 인형뽑기 게임 문제는 2019 카카오 개발자 겨울 인턴십에 나온 문제다. 크레인에서 인형을 뽑아 새로운 칸에 집어놓고 순서대로 일치되면 제거하고, 제거된 인형의 갯수를 출력하는 문제다 def solution(board, moves): nrow, ncol = len(board), len(board[0]) answer = [] counts = 0 for m in moves: for i in range(nrow): if board[i][m-1]: answer.append(board[i][m-1]) board[i][m-1] = 0 break if len(answer) > 1: if answer[-2] == answer[-1]: answer = answer[:-2] counts += 2 return cou..

Python/Algorithm 2023.08.24

[프로그래머스] 키패드 누르기 - Python

이번 문제는 2020년 카카오 인턴 코딩 테스트에 나온 문제다. num2key는 번호를 누르면 해당 좌표로 변환하는 코드를 의미한다. 1~9까지는 수식으로 정의하였고, 0의 경우 (3,1) 좌표를 리턴하는 형태로 지정했다. [1, 4, 7]에 해당하는 키패드는 왼손으로 먼저 클릭하고, [3, 6, 9]에 해당하는 키패드는 오른손으로 먼저 클릭해야 하기 때문에, [2, 5, 8, 0]에 해당하는 값만 잘 설정하면 된다. [2, 5, 8, 0]에서는 왼손과 오른손의 현재 위치에 따라 달리 클릭되기 때문에 클릭될 때마다 좌표값을 받아서 왼손 혹은 오른손의 좌표를 기억하고, 만약 같은 경우 두 값의 차이를 바탕으로 어느 손으로 클릭할 지 처리할 수 있다. 만약 두 값의 차이가 같다면, 왼손 잡이인지 오른손 잡이..

Python/Algorithm 2023.08.24
반응형