알고리즘/문제풀이

    [프로그래머스]프린터

    from collections import deque def solution(priorities, location): d = deque([(v, i) for i, v in enumerate(priorities)]) cnt = 0 while True: temp = d.popleft() if len(list(filter(lambda x: x[0] > temp[0], d))) > 0: d.append(temp) else: cnt += 1 if temp[1] == location: return cnt 난이도가 높은 문제는 아니었다. 하지만, 인덱스 문제가 있어서 난관이 있었던 문제 ! 배열의 인덱스를 직접 조작하거나 확인 + 원소 자체를 삭제해야 하는 그런 로직이 있는 경우, 나만의 전략을 세웠다. 최대한 fo..

    [프로그래머스]거리두기 확인하기

    기본적으로 BFS의 개념과 파이썬에서 사용하는 데크의 개념을 알고있어야 풀 수 있는 문제였다. 나는 두가지 다 제대로 몰랐기 때문에 못품 ;; 답안을 봐도 한번에 이해하기 힘들었다. 이거 레벨2 맞나...? 또르르... 아무튼 다른 블로그에서 보면서 코드를 이해한 내용을 바탕으로 문제 풀이를 해볼 예정이다. 일단 문제풀이를 하기 전에 BFS와 파이썬의 데크 개념을 정리할 것이다. 1. BFS 너비 우선 탐색이다. 문제를 풀 때 이 문제가 BFS다 라고 생각이 들면, BFS를 적용할 줄 알아야한다. 이번 문제도 동일한 부류인데, 과연 내가 실제 문제 풀이에서 이런 로직을 적용할 수 있을지는 모르겠다. 아무튼 BFS 개념을 정리한다. 1. 트리로 그려보자 BFS든, DFS든 트리를 그려서 풀이하는게 좀 더 ..

    [프로그래머스]배달

    다익스트라 알고리즘 + 인접행렬을 활용하는 문제였다. 나는 다익스트라 알고리즘의 개념을 완전 까먹고 있었다. 다익스트라 알고리즘 개념은 이 게시글로 포스팅했다. 혹시나 개념을 모른다면 꼭 참고해서 숙지해두길 바란다. heapq 모듈에 대해서도 복습할 수 있다. 다익스트라 풀이법과 모두 동일하다. 1. 문제 설명 N개의 마을로 이루어진 나라가 있습니다. 이 나라의 각 마을에는 1부터 N까지의 번호가 각각 하나씩 부여되어 있습니다. 각 마을은 양방향으로 통행할 수 있는 도로로 연결되어 있는데, 서로 다른 마을 간에 이동할 때는 이 도로를 지나야 합니다. 도로를 지날 때 걸리는 시간은 도로별로 다릅니다. 현재 1번 마을에 있는 음식점에서 각 마을로 음식 배달을 하려고 합니다. 각 마을로부터 음식 주문을 받으려..

    [프로그래머스]괄호 변환

    삽질을 했던 문제이다. 1. 삽질 올바른 문자열 찾기 -> 모든 ( )가 서로 쌍을 이루는 순서가 맞아야 한다. 나는 그래서 "("을 제일 먼저 찾아야 하니까, "("이 나올때까지 계속 루프를 돌고, "("가 마지막으로 나오면 그 다음 문자열이 ")"임을 확인하고, 해당 "( )"을 pop()시키면 된다고 생각했다. 그래서 이것을 재귀를 돌려서 올바른 문자열이 맞는지 확인하려고 했다. 재귀를 돌리는 인자를 선정하는게 어렵다. 아무리 생각해도 ()쌍을 pop한 후에 다음 재귀를 돌려야 하는데 맨 마지막에는 문자열의 길이가 0이 된다. 이때 ret한다고 가정하면, 맨 마지막에 ")("만 남는경우에는 예외처리를 어떻게 하는지에 대해 해결하기 어려웠다. 대부분 이런 경우는 접근 방식이 잘못된 것이다. 그래서 답..