본문 바로가기

언어64

단어 변환 최소 스텝: BFS 1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다. 2. words에 있는 단어로만 변환할 수 있습니다. from collections import deque def bfs(begin, target, words): queue = deque() queue.append([begin, 0]) #시작 단어와 단계 0으로 초기화 while queue: now, step = queue.popleft() # 현재 단어, 단계 if now == target: return step # 단어를 모두 체크하면서, 해당 단어가 변경될 수 있는지 체크 for word in words: count = 0 for i, w in enumerate(now): # 현재 단어의 알파벳 하나씩 # 리스트 내 단어와 겹치지 않는 알파벳이 있.. 2024. 2. 16.
네트워크 덩어리 세기: DFS visited = [] def dfs(v, n, computers): global visited visited[v] = True for nei in range(n): # 인접노드 탐색 # unvisited & 인접 또는 노드 자신(1) if not visited[nei] and computers[v][nei]: dfs(nei, n, computers) def solution(n, computers): # computers = n*n # 네트워크 개수 global visited # 덩어리 세기 -> DFS # 외딴 노드도 count count = 0 visited = [False] * (n) for node_idx in range(n): if not visited[node_idx]: dfs(node_idx.. 2024. 2. 16.
target으로 계산되는 경우의 수 구하기: DFS 모든 경우의 수에서 target의 개수를 구하는 문제 사용하는 경우: 모든 노드를 방문 하고자 하는 경우이므로 DFS 계산 # 타겟 넘버를 만드는 방법의 수 -> DFS (모든 경우 탐색) answer = 0 def DFS(numbers, target, idx=0, value=0): global answer N = len(numbers) # idx가 마지막이고 value가 target과 같을 때는 answer if(idx == N and target == value): answer += 1 return elif(idx == N): # idx가 마지막이기만 하면 non answer return DFS(numbers,target,idx+1,value+numbers[idx])# idx번째 수를 더해준 경우로 .. 2024. 2. 16.
BFS: 게임 맵 최단거리 구하기 from collections import deque # 최단거리: BFS def solution(maps): answer = 0 n = len(maps) m = len(maps[0]) visited = [[False]*m for _ in range(n)] q = deque() q.append((0, 0)) # e,w,s,n dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] visited[0][0] = True # me while q: y, x = q.popleft() for i in range(4): nx=x+dx[i] ny=y+dy[i] # e/w/s/n 이동이 n*m 내부이고 maps에서 1인 경우(이동 가능) if 0 2024. 2. 16.
비트연산자: XOR 연산 직사각형 나머지 한 변 찾기 def solution(v): x = v[0][0] ^ v[0][1] ^ v[0][2] y = v[1][0] ^ v[1][1] ^ v[1][2] answer = [x,y] return answer 비트연산자 a = 60, b = 13 이라 가정했을 때, a = 0011 1100 b = 0000 1101 & AND 연산. 모두 참일때만 만족 (a & b) = 12 → 0000 1100 | OR 연산. 하나만 참이여도 만족 (a | b) = 61 → 0011 1101 ^ XOR 연산. 하나만 참일 때 만족 (a ^ b) = 49 → 0011 0001 ~ 보수 연산. (~a) = -61 → 1100 0011 > 2 = 15 → 0000 1111 (a ^ b ^ b) = 60 → 0.. 2024. 2. 15.
past 30 days -> interval 29 day 2019-07-27를 기준으로 30일 전까지 활동한 기록이 있는 유저 수 이렇게 되면 7월 27일도 포함되므로 6월 28일부터 기록이 있는 유저를 봐야한다. 그렇기 때문에 date_sub('2019-07-27', interval 29 day)로 해야 정답..!!! # Write your MySQL query statement below select activity_date day, count(distinct user_id) active_users from Activity where activity_date between date_sub("2019-07-27", interval 29 day) and "2019-07-27" group by activity_date 2024. 2. 1.
컬럼마다 따로 놀 수 있다 # Write your MySQL query statement below select round(avg(if(order_date=customer_pref_delivery_date,1, 0)) * 100,2) immediate_percentage from (select customer_id, min(order_date) order_date, min(customer_pref_delivery_date) customer_pref_delivery_date from Delivery group by customer_id) a 처음엔 단순히 제일 빠른 주문과 제일 빨리 도착한 날로 테이블을 준비하고, 거기서 퍼샌티지를 계산해주었다. 그런데 생각해보니 이렇게 풀면? 실제로는 두 날짜가 다른 주문 건이어도 선택될 수 있지.. 2024. 1. 30.
집계함수 안에 IF문 넣기 어쩌다 보니 시리즈물 2024.01.29 - [언어] - AVG 안에 IF문 넣기 # Write your MySQL query statement below select query_name, round(avg(rating / position),2) quality, # round(count(if(rating 2024. 1. 30.
AVG 안에 IF문 넣기 # Write your MySQL query statement below select s.user_id, round(count(case when action='confirmed' then 1 end) / count(*),2) confirmation_rate from Signups s left join Confirmations c on s.user_id=c.user_id group by s.user_id confirmation_rate를 구하는 코드, Signups테이블에서의 모든 유저 아이디가 그룹바이 되어야하므로, left join을 해주어야 한다 confirmations 테이블에 찍힌 개수 중 confirmed 상태인 개수 비율을 계산해야 한다. # Write your MySQL query state.. 2024. 1. 29.
스택/큐 1. 기능개발 lv.2 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. 제한 사항 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다. 작업 진도는 100 미만의 자연수입니다. 작업 속도는 10.. 2024. 1. 8.