👨‍🏫ps/❄️프로그래머스

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

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

    문제 구현 문제이다. 처음에 모든 조합을 combination을 구현하여, 모든 조합을 구했다,,!!(itertools에 combination이 있다,,,) dictionary를 사용하여, 각 조합의 갯수를 구했다.(이것도 collections의 Counter를 사용하면 되긴하다.) 이후에 dq를 사용하여, 동일한 길이의 조합 중에 가장 많은 갯수의 조합을 왼쪽에 놓았다. dq의 앞에가 가장 큰 값이기 때문에 그 값과 비교하여, 같은 조합만 answer에 넣어주고 작은 값이 나오면 break해주었다. answer의 값들을 sort해주어서 return 했다. 코드 from collections import deque def solution(orders, course): answer = [] combi = ..

    [프로그래머스] 롤케이크 자르기 [python]

    [프로그래머스] 롤케이크 자르기 [python]

    문제 생각보다 간단한 문제이다. 처음에는 list를 계속 slicing 해서 set으로 변환 후, 크기 체크를 할까 했는데, O(n^2)이여서 타임아웃이 날 거 같아서 다른 방법을 생각했다. dictionary를 두 개 사용해서 풀었다. 처음에 철수의 dictionary에 topping에 있는 값을 key로 그리고 각 topping의 갯수를 value로 저장하였다. 앞에서부터 동생의 케이크에 토핑을 하나씩 추가하고, 철수의 토핑에서는 동생에 추가한 토핑을 -1하였다. 그래서 제거한 토핑의 갯수가 0이 되었다면, 철수의 dictionary에서 해당 토픽을 완전히 삭제하였다. 둘의 dictionary의 크기를 비교하여, 크기가 같다면 공정하게 나눈 것 이기 때문에 +1을 해주었다. 토핑에서 제거하는 것은 d..

    [프로그래머스] 숫자 변환하기 [python]

    [프로그래머스] 숫자 변환하기 [python]

    문제 문제는 간단했다. x를 더 큰 수로 만들 수 있는 방법은 3가지 있고, y라는 target 수에 도달하는 방법 중 최소 연산을 한 값을 구하는 거 였다. DP로 풀었다. memorize로 값들을 1억으로 초기화를 했고, 시작하는 수인 x를 0으로 설정하고, 세가지 연산을 진행하였다. 현재 계산하는 값이 1억이면 도달할 수 없는 수 이기 때문에 넘어가고, 현재까지 도달하는 데 연산 수 + 1 과 도달할 수에 저장된 값을 비교하여, 작은 값을 현재 연산 수로 저장하였다. 코드 def solution(x, y, n): answer = 0 memorize = [1e9] * (y+1) memorize[x] = 0 for i in range (x, y+1): if memorize[i] == 1e9: conti..

    [프로그래머스] 큰 수 만들기 [python]

    [프로그래머스] 큰 수 만들기 [python]

    https://school.programmers.co.kr/learn/courses/30/lessons/42883 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 stack를 사용해서 풀었다. stack에 있는 값이 현재 값보다 작다면 가장 최근에 들어간 값을 제거했고 다시 그 앞자리수를 비교했다. 코드 def solution(number, k): answer = '' stack = [] popNum = 0 idx = 0 while idx < len(number) and popNum < k: # stack 값이 없다면 현재 값을 stack 넣기 if ..

    [프로그래머스] 게임 맵 최단거리

    [프로그래머스] 게임 맵 최단거리

    문제 간단한 BFS 문제인데, 오랜만에 BFS를 풀어서 버벅거렸다. 그래도 나름 금방 풀었다. 코드 def solution(maps): global mX,mY mX = [0,1,0,-1] mY = [1,0,-1,0] return bfs(maps) def bfs(maps): endX = len(maps) - 1 endY = len(maps[0]) - 1 isVisit = [[ False for j in range(len(maps[0]))] for i in range(len(maps))] queue = [Point(0,0,1)] isVisit[0][0] = True while len(queue) != 0: p = queue.pop(0) if p.x == endX and p.y == endY: return p..