본문 바로가기

알고리즘 테스트

(24)
[프로그래머스/파이썬] 배달 처음 이 문제를 보자마자 이건 딕셔너리에 {출발지: [(도착지, 시간), (도착지, 시간), ...], 출발지: [...], ...} 이런식으로 우선 풀어서, 재귀로 누적 시간을 잰다음 K보다 시간이 작은지 체크하고 list에 넣어야겠다 라고 생각하고 이렇게 풀었다. def solution(N, road, K): towns = [500000] * (N+1) graph = collections.defaultdict(list) for r in road: a, b, time = r graph[a].append((b, time)) graph[b].append((a, time)) def go_delivery(visited: list, arrive: int, time: int): for a, t in graph[v..
[프로그래머스] 네트워크 언어: python3 문제유형: DFS/BFS 내가 푼 답안 import collections def solution(n, computers): answer = 0 visited = [] def connect(start): queue = collections.deque() queue.append(start) while queue: num = queue.popleft() visited.append(num) queue += [i for i, c in enumerate(computers[num]) if c == 1 and i not in visited] for com in range(n): if com not in visited: answer += 1 connect(com) return answer
[백준 10989번] 수 정렬하기 3 (Python) 문제 풀이 어떻게 풀어야할까 고민하던 중 힌트가 이미 나왔다. 카운팅 정렬을 이용하면 풀 수 있다는 것이다. 그래서 아래와 같이 풀었다. import sys # 입력받기 input = sys.stdin.readline n = int(input()) input_array = list() for _ in range(n): input_array.append(int(input())) # 카운팅 배열 선언 counting_array = [0] * (max(input_array)+1) for num in input_array: counting_array[num] += 1 # 카운팅 직전 개수 더하기 for i in range(1, len(counting_array)): counting_array[i] += coun..
[백준 1260번] DFS와 BFS (Python) import collections import sys def solution(lst, v): graph = collections.defaultdict(list) for a, b in lst: graph[a].append(b) graph[b].append(a) # 작은 수부터 탐방 for key in graph.keys(): graph[key].sort() def dfs(v, discovered=[]): discovered.append(v) for w in graph[v]: if w not in discovered: discovered = dfs(w, discovered) return discovered def bfs(v): discovered = [v] queue = [v] while queue: v =..
[백준 1427번] 소트인사이드 (Python) 문제: nums = list(map(int, input())) # 삽입 정렬 i = 1 while i < len(nums): j = i while 0 < j and nums[j-1] < nums[j]: nums[j], nums[j-1] = nums[j-1], nums[j] j -= 1 i += 1 print(''.join(map(str, nums)))
[백준 2751번] 수 정렬하기2 (Python) import sys from typing import List # 정렬하며 병합하기 def mergeTwoLists(left: List[int], right: List[int]) -> List[int]: result = [] l, r = 0, 0 while l < len(left) and r < len(right): if left[l] List[int]: if len(A) == 1: return A mid = len(A)//2 left = sortList(A[:mid]) right = sortList(A[mid:]) return mergeTwoLists(left, right) A = [int(sys.stdin.readline()) for i in range(int(sys.stdin.readline()))..
[백준 11047번] 동전 0 (Python) 문제 : n, k = map(int, input().split()) kinds = [] for _ in range(n): kinds.append(int(input())) kinds.sort(reverse=True) result = 0 for i in range(n): if k < kinds[i]: continue result += k // kinds[i] k -= kinds[i] * (k // kinds[i]) if not k: break print(result)
[백준] 2798번 블랙잭 사용언어: python3 문제 : [링크 www.acmicpc.net/problem/2798] 내가 푼 답 def solution(n, m)-> int: cards = list(map(int, input().split())) cards.sort() result = 0 for i in range(n-2): left, right = i+1, len(cards)-1 while left < right: sum = cards[i]+cards[left]+cards[right] if m == sum: return sum elif m < sum: right -= 1 else: # sum < m if result < sum: result = sum left += 1 return result n, m = map(int, ..
[프로그래머스] 예산 문제설명 : programmers.co.kr/learn/courses/30/lessons/12982 내가 푼 답 public int solution(int[] d, int budget) { int answer = 0; Arrays.sort(d); int limit = 0; for(int i=0; i
[프로그래머스] 서울에서 김서방 찾기 문제설명 : programmers.co.kr/learn/courses/30/lessons/12919 내가 푼답 public String solution(String[] seoul) { int x = 0; for(int i=0; i