전체 글
[프로그래머스] 괄호 회전하기 / 파이썬 / Python / 월간코드챌린지 시즌2
💡solutions ) 💬 stack에 괄호를 하나씩 저장하며 올바른 괄호가 되는지 확인하는 로직 구현. 💬 오른쪽 괄호(닫는 괄호)가 나오면 stack에 이미 저장했던 마지막 -1번째 괄호와 짝이 맞는지 확인하며 올바른 괄호인지 판단. 💬 첫 번째 if 조건문에서는 stack이 비어있을 때 오른쪽 괄호(닫는 괄호)가 나오면 올바른 괄호 모양이 아니므로 바로 break하여 다음 케이스로 넘어감. 💬 처음에 테스트케이스 13번만 틀려서 질문하기를 참고하여음. {{{{{의 경우에 통과할 수 있도록 마지막 if 조건문에서 and not stack 조건을 넣어 stack이 최종적으로 비어 있는 경우에만 올바른 괄호로 카운트할 수 있도록 함. 👨💻code ) def solution(s): bracket_dict..
[프로그래머스] 오픈채팅방 / 파이썬 / Python / 2019 KAKAO BLIND RECRUITMENT
💡solutions ) 💬 userid와 name을 담는 딕셔너리를 사용하여 -> userid로 유저들을 구분하여 name을 업데이트해줌 💬 results 리스트에는 이름을 변경하는 Change를 제외하고 채팅방을 들어오거나 나가는 경우에만 id와 Enter, Leave 명령어를 튜플 형태로 함께 넣는다. 💬 results에 넣어뒀던 순서대로 출력하는데 이때 userid를 사용하여 id_name_dict에서 해당 유저의 이름을 꺼내서 출력한다. 👨💻code ) def solution(records): id_name_dict = {} results = [] answer = [] for record in records: record_lst = record.split(' ') if record_lst[0] ..
[프로그래머스] 전화번호 목록 / 파이썬 / Python / 문자열 정렬
💡solutions ) 💬 sorted()메소드를 사용하여 phone_book을 먼저 정렬한다 -> 문자열 정렬이기 때문에 12, 120, 13 이런식으로 정렬된다. 숫자의 절대적인 크기가 아닌 사전 정렬 방식으로 정렬된다. 💬 정렬이 됐다면 첫 번째 전화번호부터 탐색을 시작하는데, 그 뒤 바로 인접한 전화번호의 접두어가 되는지 비교한다. 💬 이때 인접한 전화번호만 비교하면 되는 이유는 사전방식으로 문자열을 이미 정렬했기 때문이다. 예를 들어 12, 139, 160 식으로 정렬이 되기 때문에 12와 139를 비교했을 때 12가 139의 접두어가 되지 못한다면 12는 그 다음 전화번호인 160의 접두어도 마찬가지로 되지 못하기 때문에 비교할 필요가 없다. 👨💻code ) def solution(phone..
[프로그래머스] 거리두기 확인하기 / 파이썬 / Python / 2021카카오 인턴십 코딩테스트
💡solutions ) 💬 대기실의 각 칸을 하나의 정점으로 보고, 응시자들이 있는 정점을 기준으로 bfs 그래프 탐색을 진행함. 💬 각 정점에서 인접하여 연결된 간선들을 탐색하는데 파티션이 있는 경우는 지나가지 못하고, 거리 2이내의 정점들만 살펴보며 다른 응시자의 유무를 확인함. 💬 이때 지나간 정점은 다시 지나가지 않기 위해 visit 배열을 통해 중복을 체크함. 👨💻code ) from collections import deque dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] # 상하좌우 def bfs(place, i, j): visit = [[0]*5 for _ in range(5)] q = deque() q.append((i, j, 0)) visit[i][j] = 1 w..
[프로그래머스] 숫자 문자열과 영단어 / 파이썬 / Python / 2021 카카오 채용연계형 인턴십
💡solutions ) 💬 숫자 10개를 딕셔너리 형태로 담아서 구분해주었음 💬 주어진 s에서 숫자가 나오면 result에 바로 넣어주고 문자가 나오면 num에 차례대로 임시 저장했다가 num_dic 딕셔너리에 있는 숫자가 되면 result에 넣어주고 num은 초기화 👨💻code ) def solution(s): num_dic = { 'zero':'0', 'one':'1', 'two':'2', 'three':'3', 'four':'4', 'five':'5', 'six':'6', 'seven':'7', 'eight':'8', 'nine':'9'} result = '' num = '' for i in range(len(s)): tmp = s[i] if tmp.isdigit(): result += tmp e..
[프로그래머스] 행렬 테두리 회전하기 / 파이썬 / Python
💡solutions ) 💬 단순히 구현하는 시뮬레이션 문제 💬 테두리 영역의 숫자들을 회전시키기 위해 for문에서 인덱스 범위를 잘 구분하는 것이 중요함 💬 Python에선 두 변수를 한번에 swap이 가능하다 -> e.g) a,b = b,a로 a와 b값 교환 가능 👨💻code ) def solution(rows, columns, queries): arr = [[0]*columns for _ in range(rows)] cnt = 1 result = [] for i in range(rows): for j in range(columns): arr[i][j] = cnt cnt += 1 for r1, c1, r2, c2 in queries: min_v = 10001 before = arr[r1][c1-1] ..
[프로그래머스] 배달 / 파이썬 / Python / Dijkstra
💡solutions ) 💬 다익스트라 알고리즘을 사용하여 최단 거리를 구하는 로직 💬 처음 시작하는 노드 1에서의 최단 거리는 0으로 초기화 💬 인접행렬 만들고 -> heappush를 통해 최단 거리 순으로 정렬 -> 최단 거리가 될 때마다 거리를 저장해 놓는 리스트인 dis 업데이트 👨💻code ) import heapq def dijkstra(dis, adj): heap = [] heapq.heappush(heap, [0, 1]) while heap: cost, node = heapq.heappop(heap) for c, n in adj[node]: if cost + c < dis[n]: dis[n] = cost + c heapq.heappush(heap, [cost + c, n]) def solu..
[프로그래머스] 합승 택시 요금 / 파이썬 / Python / Dijkstra / 2021 KAKAO BLIND RECRUITMENT/ 카카오 코테
💡solutions ) 💬 다익스트라(Dijkstra) 알고리즘을 사용하여 문제를 풀었다. 💬 다음 두 가지 경우를 모두 포함하여 최소 비용을 구해야 하는 문제다. (1) 무지와 어피치가 따로 택시를 타고 가능 경우 (2) 특정 지점까지 함께 이동 후 각자 목적지까지 가는 경우 -> 이때 둘 중 한사람이 나머지 한사람을 데려다 주고 본인 집으로 이동하는 경우도 포함된다. 💬 카카오 테크 블로그에 따르면, 다익스트라와 플로이드와샬 두 가지 방법으로 해결 가능하다. 추후 플로이드와샬로도 풀어봐야겠다. 👨💻code ) import heapq def dijkstra(adj, num, s, e): heap = [] heapq.heappush(heap, [0, s]) INF = float('inf') dist =..