전체 글 107

[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

[Python | 프로그래머스 | Lv_2] 프로세스

😄 아이디어 1. 1 ~ 9 사이의 우선순위가 중복해서 존재가능 👉 _!max_key!_변수를 통해 실행예정 key 관리 2. _!priorities!_리스트에서 꺼낸 값과 _!max_key!_비교 👉 일치하면 실행, _!max_key!_ 변동여부 확인 👉 불일치하면 현재 리스트에 다시 추가 import math def solution(priorities, location): answer = 0 dic = {} max_key = -1 for prior in priorities: dic[prior] = dic.get(prior, 0) + 1 max_key = max(max_key, prior) priorities[location] += 0.5 count = 0 while len(priorities) > 0..

알고리즘 2024.04.07

[Python | 프로그래머스 | Lv_2] 2개 이하로 다른 비트

😄아이디어 1. 2진수로 변환 후 가장 앞자리에 '0' 삽입 2. 0을 만나면 현재를 1로 바꾸고 뒷자리는 0으로 수정 👉 현재 수보다는 크면서 가장 작은 수를 유지하려면 가장 큰 숫자를 만들어내는 비트부터 수정해야함. 3. 수정된 숫자를 최소값으로 유지되는 변수 _!min_num!_과 비교하고 반복이 종료되면 결과 리스트에 저장 def solution(numbers): answer = [] for num in numbers: binary = list('0' + format(num, 'b')) min_num = pow(10, 15); for i, val in enumerate(binary): if val == '0': tmp = binary.copy() tmp[i] = '1' if i + 1 < len(..

카테고리 없음 2024.04.05

[Python | 프로그래머스 | Lv_2] 2 x n 타일

😄 아이디어 1. 동적프로그래밍 적용 : 피보나치 2. 모듈러 산술 def solution(n): answer = 0 dp = [0 for _ in range(60_001)]; idx = 0 # DP # n = 1 // 1 # n = 2 // 2 # n = 3 // 3 # n = 4 // 5 while (n >= idx): idx += 1 if idx == 1: dp[idx] = 1 continue elif idx == 2: dp[idx] = 2 continue dp[idx] = (dp[idx - 2] + dp[idx - 1]) % 1_000_000_007 return dp[idx - 1] ✔️링크:https://school.programmers.co.kr/learn/courses/30/lessons/1..

알고리즘 2024.04.05