알고리즘 91

[Python | 프로그래머스 | Lv_2] 과제 진행하기

😉 아이디어1. 과제가 진행되는 시간 기준 구현 _!0초 ~ plans의 최대값 * 1_000!_2. 매 초마다 _!now!_에 저장된 과제의 처리시간 감소3. 과제를 멈추고 새로운 과제를 시작할 경우 _!stopped!_리스트에 값 추가    👉 과제가 종료되면 이 리스트에서 꺼내 할당😉 풀이from collections import dequedef solution(plans): for plan in plans: plan[1] = hm_to_ss(plan[1]) plan[2] = mm_to_ss(plan[2]) plan.append(plan[1] + plan[2]) plans.sort(key = lambda x : x[1]) # ..

알고리즘 2024.05.08

[Python | 프로그래머스 | Lv_2] 연속된 부분 수열의 합

😉 아이디어1. 투포인터 활용 👉 포인터 사이의 값을 유지 및 관찰, 조건 일치 시 리스트에 저장2. 리스트 정렬 기준 '인덱스의 값 차이(갭)', '첫번째 인덱스'😉 풀이def solution(sequence, k): answer = [] # 투포인터 + 누적합 l = 0 r = 0 lst = [] mx = len(sequence) summ = sequence[l] while l ✔ 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/178870?language=python3

알고리즘 2024.05.08

[Python | 프로그래머스 | Lv_2] 미로 탈출

😁 아이디어1. BFS를 통해 최단거리를 찾는 방법을 2회에 걸쳐 진행한다.2. 시작점 -> 레버, 레버 -> 끝점3. 2회 동안 카운팅을 반환😁 코드from collections import dequedef solution(maps): answer = 0 arr = [] sPos = [] ePos = [] lPos = [] width = len(maps[0]) height = len(maps) for idx, m in enumerate(maps): lst = list(m) if 'S' in lst: sPos = [idx, lst.index('S')] if 'E' in lst: ..

알고리즘 2024.05.07

[Python | 프로그래머스 | Lv_3] 부대복귀

😄 아이디어1. 연결점을 저장한 각 노드 생성2. 그래프 이동 시 시간 저장 배열 생성3. BFS를 통한 탐색 ☝️최단 경로를 찾는 경우는 BFS 활용 명심😄 코드from collections import dequeglobal arr;def bfs(graph, key): global arr visited[key] = 1 q = deque([key]) while q: x = q.popleft() for node in graph[x]: if arr[node] == -1: q.append(node) arr[node] = arr[x] + 1def solution(n, road..

알고리즘 2024.04.29

[Python | 프로그래머스 | Lv_3] 인사고과

😄 아이디어 1. _!a, b!_ 의 값 중 하나는 내림차순, 남은 하나는 오름차순으로 정렬한다. 👉 코드에서는 a를 내림차순 b를 오름차순 정렬 2. a의 값이 내림차순으로 정렬되고 있기에 탐색 중 갱신되는 _!maxB!_의 값보다 작은 b가 탐색되면 인센티브를 받지 못하는 사원이다. ✔️ 코드 def solution(scores): answer = 1 wanho = scores[0] rs = sorted(scores, key = lambda x: (-x[0], x[1])) maxB = 0 for score in rs: if (score[0] > wanho[0] and score[1] > wanho[1]): return -1 if score[1] >= maxB: maxB = score[1] if wan..

알고리즘 2024.04.21

[Python | 프로그래머스 | Lv_2] 당구 연습

😄 아이디어 1. 선대칭을 통해 일직선 형성 👉 두 좌표 사이의 값 계산 2. 상하좌우 당구대를 활용한 원쿠션 결과를 확인 👉 X축 혹은 Y축에서 동일 선상 위치 시 계산 제한 😄 풀이 def solution(m, n, startX, startY, balls): answer = [] for ball in balls: arr = [] if (startY != ball[1] or startX > ball[0]): arr.append(calcDistance([startX + (m - startX) * 2, startY], ball)) if (startY != ball[1] or startX < ball[0]): arr.append(calcDistance([-startX, startY], ball)) if (s..

알고리즘 2024.04.19

[Python | 프로그래머스 | Lv_2] 전화번호 목록

😄 아이디어 1. _!len_list!_리스트로 접두사로 비교될 길이 저장 👉 0번째 길이와 같은 값들은 우선 저장 2. _!len_list!_의 길이만큼 잘라 _!dt!_변수에 _!key!_보관 👉 동일한_!key!_에 값이 있으면 예외처리 3. 예외처리된 것이 없으면 현재 값 _!dt!_보관 & 현재 값 길이 대조 후_!len_list!_에 보관 def solution(phone_book): answer = True dt = {} phone_book.sort(key = len) len_list = [len(phone_book[0])] for i, val in enumerate(phone_book): if len(val) == len_list[0]: dt[val] = dt.get(val, 0) + 1 ..

알고리즘 2024.04.08