목록Development/Algorithm & Coding Test (189)
컴공생의 다이어리
[프로그래머스] 오픈채팅방 - 파이썬(Python) def solution(record): answer = [] id_dict = dict() # id에 해당하는 이름 정보 commands = [list(r.split()) for r in record] # record의 데이터들을 공백 기준으로 분리 for command in commands: if command[0] == 'Enter' or command[0] == 'Change': # id에 해당하는 닉네임 정보 생성 혹은 업데이트 id_dict[command[1]] = command[2] for command in commands: if command[0] == 'Enter': answer.append(id_dict[command[1]] + "님이..
[프로그래머스] 방문 길이 - 파이썬(Python) def solution(dirs): move = {'U': (0, 1), 'D': (0, -1), 'R': (1, 0), 'L': (-1, 0)} answer = set() pos_x, pos_y = 0, 0 for i in dirs: x, y = move[i][0], move[i][1] if -5
[프로그래머스] 더 맵게 - 파이썬(Python) import heapq def solution(scoville, K): heapq.heapify(scoville) count = 0 while len(scoville) >= 2 and scoville[0] = K else -1 혹은 import heapq def solution(scoville, K): heapq.heapify(scoville) count = 0 while sco..
백준 14502번 : 연구소 (문제 바로가기) 내 코드 import sys from collections import deque from itertools import combinations def bfs_and_count_zero(graph, virus_pos, n, m): # 너비 우선 탐색 & 빈칸 수 구하기 directions = [(1, 0), (-1, 0), (0, 1), (0, -1)] visited = [[False] * m for _ in range(n)] for i, j in virus_pos: visited[i][j] = True queue = deque(virus_pos) while queue: # 바이러스 전파하기! x, y = queue.popleft() for i in rang..
[프로그래머스] K번째수 - 파이썬(Python) def solution(array, commands): answer = [] for i, j, k in commands: answer.append(sorted(array[i - 1:j])[k - 1]) return answer https://programmers.co.kr/learn/courses/30/lessons/42748 코딩테스트 연습 - K번째수 [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3] programmers.co.kr
백준 2225번 : 합분해 (문제 바로가기) 내 코드 n, k = map(int, input().split()) dp = [[0] * (k + 1) for _ in range(n + 1)] dp[0][0] = 1 for i in range(n + 1): for j in range(1, k + 1): dp[i][j] = dp[i - 1][j] + dp[i][j - 1] print(dp[n][k] % 1000000000)
백준 7569번 : 토마토 (문제 바로가기) 내 코드 import sys from collections import deque input = sys.stdin.readline # m : 상자 가로 칸 수, n : 상자 세로 칸 수, h : 쌓아올려지는 상자의 수 m, n, h = map(int, input().split()) arr = [] queue = deque() for i in range(h): temp = [] for j in range(n): temp.append(list(map(int, input().split()))) for z in range(m): if temp[j][z] == 1: queue.append((i, j, z)) arr.append(temp) # 6방향 : 위, 아래, 왼쪽..
다익스트라(Dijkstra) 다이나믹 프로그래밍을 활용한 대표적인 최단 경로 탐색 알고리즘 특정한 노드에서 출발해 연결되어 있는 다른 모든 노드로 가는 최단 경로를 구하기 위한 알고리즘 0보다 작은 값을 가지는 음의 간선이 없어야 정상적으로 동작 보통 우선 순위 큐를 구현하기 위해 사용되는 heapq 라이브러리를 활용해서 구현 GPS 소프트웨어의 기본 알고리즘으로 채택 과정 출발 노드를 설정 출발 노드를 기준으로 각 노드의 최소 비용을 저장 방문하지 않은 노드 중에서 가장 비용이 적은 노드를 선택 해당 노드를 거쳐서 특정한 노드로 가는 경우를 고려하여 최소 비용을 갱신 위의 3번 ~ 4번 과정을 반복 동작 단계에 대한 예시는 아래 게시물이 잘 정리되어 있으니 참고하면 좋을 것 같다! [알고리즘] 다익스트..
백준 14676번 : 영우는 사기꾼? (문제 바로가기) 내 코드 import sys from collections import defaultdict input = sys.stdin.readline # n : 건물 종류의 개수, M : 건물 사이의 관계수, k : 영우의 게임 정보의 개수 n, m, k = map(int, input().split()) graph = defaultdict(list) # 건물 관계 indegree = [0] * (n + 1) # 진입 차수 build = [0] * (n + 1) # 빌딩 몇개 지어졌는지 check = False # 치트키 여부 for _ in range(m): # 건물 관계 x, y = map(int, input().split()) graph[x].append..
백준 1474번 : 밑 줄 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline n, m = map(int, input().split()) data = [input().rstrip() for _ in range(n)] default_len, r = divmod(m - sum(map(len, data)), n - 1) result = data[0] for idx in range(1, n): if data[idx][0].islower() and r != 0: r -= 1 result += '_' * (default_len + 1) + data[idx] elif idx + r == n: r -= 1 result += '_' * (default_len + 1) + dat..