목록Python (138)
나의 개발일지
문제 : https://www.acmicpc.net/problem/1260 from collections import defaultdict n, m, v = map(int, input().split()) graph = defaultdict(list) for i in range(m): # 양방향 그래프 구현 x, y = map(int, input().split()) graph[x].append(y) graph[y].append(x) def dfs(n): print(n, end=" ") visit[n] = 1 graph[n].sort() # 숫자가 작은 노드부터 방문하기 위해 정렬 for i in graph[n]: if visit[i] == 0: dfs(i) def bfs(n): q = [graph[n]] ..
문제 : https://school.programmers.co.kr/learn/courses/15008/lessons/121685 def stack(gen, n): stack = [] while gen>1: stack.append(n%4) n //= 4 gen -= 1 while stack: num = stack.pop() if num == 0: return "RR" if num == 3: return "rr" return "Rr" def solution(queries): answer = [] for gen, n in queries: answer.append(stack(gen, n-1)) return answer
문제 : https://school.programmers.co.kr/learn/courses/15008/lessons/121684 dfs, 재귀 각 종목 별로 대표를 뽑고 능력치 합을 계산해 최댓값을 찾는다. answer = 0 def dfs(d, sum, ability, ck): global answer n = len(ability) # 학생 수 m = len(ability[0]) # 종목 수 if d == m: # 깊이가 최대 종목 수에 도달하면 answer = max(answer, sum) # 더 큰 능력치 합으로 업데이트 return else: # 아니면 for i in range(n): # 학생 수 만큼 반복 if ck[i] == 0: # 종목 대표로 안 나간 학생이면 ck[i] = 1 # 대표..
문제 : https://school.programmers.co.kr/learn/courses/15008/lessons/121683 def solution(input_string): answer = "" chk = [] for i in input_string: if input_string.count(i) >= 2 and i not in chk: # 2개 이상이고 확인 안 한 알파벳 idx = [] # 알파벳 위치 넣을 배열 (알파벳마다 초기화) chk.append(i) # 이미 검사한 알파벳 또 안 하려고 추가 for j in range(len(input_string)): if i == input_string[j]: idx.append(j) # 같은 알파벳 위치 추가 for k in range(len(id..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/92343 2022 KAKAO BLIND RECRUITMENT 카카오 해설 사이트 : https://tech.kakao.com/2022/01/14/2022-kakao-recruitment-round-1/ 🔑 : DFS def solution(info, edges): answer = [] visit = [0] * len(info) visit[0] = 1 def dfs(sheep, wolf): if sheep > wolf: answer.append(sheep) else: return for p, c in edges: if visit[p] and not visit[c]: # 부모 노드는 방문했고 자..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/92344 2022 KAKAO BLIND RECRUITMENT 문제 🔑 : 누적합 skill 리스트마다 board의 값을 바꿔주고 마지막에 1보다 큰 것의 개수를 세니 당연히 시간초과남 board 보다 1열 1행 큰 map을 만들어주고 skill 하나에 점 4개만 찍고 난 후 누적 합을 계산 def solution(board, skill): answer = 0 n, m = len(board), len(board[0]) map = [[0] * (m+1) for _ in range(n+1)] # board 보다 1열 1행 큰 맵 for type, r1, c1, r2, c2, degree in sk..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/67259 🔑 BFS 아래쪽으로 먼저 갈 때 오른쪽으로 먼저 갈 때 두 가지 경우를 탐색 from collections import deque def solution(board): n = len(board) mx = [-1, 1, 0, 0] my = [0, 0, -1, 1] def bfs(x, y, cost, d): visit = [[0] * n for _ in range(n)] Q = deque([(x, y, cost, d)]) while Q: x, y, cost, d = Q.popleft() for i in range(4): nx, ny = x + mx[i], y + my[i] if 0
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/67258 2020 카카오 인턴십 Lv.3 문제 🔑 : 딕셔너리, 투포인터 def solution(gems): gems_len = len(set(gems)) # 보석 종류 수 answer = [1, len(gems)] gems_dict = {gems[0] : 1} # 첫 번째 보석 미리 저장 l = 0 r = 0 while l < len(gems): if len(gems_dict) != gems_len: # 모든 보석이 안 들어있으면 r += 1 # 오른쪽으로 이동 if r == len(gems): # 범위 벗어나면 브레이크 break if gems[r] not in gems_dict: # 딕..