반응형

자료구조 및 알고리즘/알고리즘 47

[알고리즘] 다익스트라(Dijkstra) 알고리즘 with heapq

[알고리즘] 다익스트라(Dijkstra) 알고리즘 다익스트라 알고리즘: 한 지점에서 다른 특정 지점까지의 최단 경로를 구해야 하는 경우에 사용할 수 있는 최단 경로 알고리즘 입력 예시 # 6개의 노드(1~6), 11개의 간선 6 11 # 시작 노드 1 # a, b, c: a 노드에서 b 노드로 가는 비용 c 1 2 2 1 3 5 1 4 1 2 3 3 2 4 2 3 2 3 3 6 5 4 3 3 4 5 1 5 3 1 5 6 2 우선순위 큐(heapq)를 이용한 풀이 import heapq import sys input = sys.stdin.readline INF = int(1e9) n, m = map(int, input().split()) start = int(input()) graph = [[] for i..

[알고리즘] 2020 KAKAO BLIND RECRUITMENT - 문자열 압축

[알고리즘] 2020 KAKAO BLIND RECRUITMENT - 문자열 압축 url: https://programmers.co.kr/learn/courses/30/lessons/60057 문제 설명 데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다. 간단한 예로 aabbaccc의 경우 2a2ba3c(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압..

[알고리즘] 이것이 취업을 위한 코딩 테스트다 with 파이썬 - 럭키 스트레이트

이것이 취업을 위한 코딩 테스트다 with 파이썬 - 럭키 스트레이트 url: https://www.acmicpc.net/problem/18406 내 풀이 import sys input = sys.stdin.readline n = input().rstrip('\n') li = list(n) mid = (len(n)-1)//2 left_side = li[:mid+1] right_side = li[mid+1:] left_sum = 0 right_sum = 0 for i in range(mid+1): left_sum += int(left_side[i]) right_sum += int(right_side[i]) if left_sum == right_sum: print("LUCKY") else: p..

[알고리즘] 2019 KAKAO BLIND RECRUITMENT - 무지의 먹방 라이브

2019 KAKAO BLIND RECRUITMENT - 무지의 먹방 라이브 무지의 먹방 라이브 * 효율성 테스트에 부분 점수가 있는 문제입니다.평소 식욕이 왕성한 무지는 자신의 재능을 뽐내고 싶어 졌고 고민 끝에 카카오 TV 라이브로 방송을 하기로 마음먹었다. 그냥 먹방을 하면 다른 방송과 차별성이 없기 때문에 무지는 아래와 같이 독특한 방식을 생각해냈다. 회전판에 먹어야 할 N 개의 음식이 있다. 각 음식에는 1부터 N 까지 번호가 붙어있으며, 각 음식을 섭취하는데 일정 시간이 소요된다. 무지는 다음과 같은 방법으로 음식을 섭취한다. 무지는 1번 음식부터 먹기 시작하며, 회전판은 번호가 증가하는 순서대로 음식을 무지 앞으로 가져다 놓는다. 마지막 번호의 음식을 섭취한 후에는 회전판에 의해 다시 1번 음..

[알고리즘] 이것이 취업을 위한 코딩 테스트다 with 파이썬 - 만들 수 없는 금액

이것이 취업을 위한 코딩 테스트다 with 파이썬 - 만들 수 없는 금액 내 풀이 import sys from itertools import combinations input = sys.stdin.readline n = input() coins = list(map(int, input().split())) coins.sort() result = 0 arr = [0] * (sum(coins)+1) for i in range(1, len(coins)+1): for combi in combinations(coins, i): arr[sum(combi)] += 1 for i in range(1, len(arr)): if arr[i] == 0: result = i break print(result) 내가 작성한 코드..

[알고리즘] 이것이 취업을 위한 코딩 테스트다 with 파이썬 - 문자열 뒤집기

url: https://www.acmicpc.net/problem/1439 내 풀이 만일 "0001100"이라는 문자열이 있다면 이를 ["000", "00"]와 ["11"]로 만들어서, 즉 0으로 구성된 문자열만을 포함한 zero_list와 1로만 구성된 문자열을 포함한 one_list를 만든다. 그러고 나서 요소가 더 적은(["11"]) 리스트를 선택하여 해당 리스트의 길이를 출력한다. import sys input = sys.stdin.readline s = input() zero_list = [] one_list = [] result = 0 tmp = s[0] for i in range(len(s)-1): if s[i] == s[i+1]: tmp += s[i+1] else: if '0'..

[알고리즘] 이것이 취업을 위한 코딩 테스트다 with 파이썬 - 볼링공 고르기

이것이 취업을 위한 코딩 테스트다 with 파이썬 - 볼링공 고르기 내 풀이 from itertools import combinations import sys input = sys.stdin.readline n, m = map(int, input().split()) bowling_balls = list(map(int, input().split())) count = 0 for combi in combinations([i for i in range(1, n+1)], 2): if bowling_balls[combi[0]-1] != bowling_balls[combi[1]-1]: count += 1 print(count)

[알고리즘] 이것이 취업을 위한 코딩 테스트다 with 파이썬 - 곱하기 혹은 더하기

이것이 취업을 위한 코딩 테스트다 with 파이썬 - 곱하기 혹은 더하기 내 풀이 from collections import deque s = input() s = list(map(int,s)) q = deque(s) result = 0 while True: if len(q) first + second: q.appendleft(first*second) else: q.appendleft(first+second) print(q.pop()) 책 풀이 data = input() result = int(data[0]) for i in range(1, len(data)): num = int(data[i]) if num

반응형