diff --git a/su-lim/W3/disk.py b/su-lim/W3/disk.py new file mode 100644 index 0000000..708292a --- /dev/null +++ b/su-lim/W3/disk.py @@ -0,0 +1,28 @@ +# disk.py + +def solution(jobs): + answer = 0 # 평균 작업 시간 저장 + current = 0 # 현재 몇ms가 흐른 상태인지 + finish = [] # 종료한 job의 인덱스 저장 + + jobs.sort() + + while(len(finish) != len(jobs)): # 모든 job을 clear했으면 종료 + for idx in range(len(jobs)): + # 인덱스를 늘리면서 처리되지 않은 job들을 찾음 + if idx not in finish: + if jobs[idx][0] > current: + current = jobs[idx][0] + break + vaild = [] # 현 시점에서 처리가능한 job들을 모아둠 (현재시간보다 요청시간이 이전이거나 같은 경우) + for job, i in zip(jobs[idx:], range(idx,len(jobs))): + if job[0] > current: # 작업의 요청시간이 현재보다 클 경우 + break + if i not in finish: + vaild.append(job + [i]) + next_job = sorted(vaild, key=lambda x : (x[1]))[0] + finish.append(next_job[2]) + answer += (current - next_job[0] + next_job[1]) + current += next_job[1] + break + return answer // (len(jobs)) \ No newline at end of file diff --git a/su-lim/W3/network.py b/su-lim/W3/network.py new file mode 100644 index 0000000..fb5a074 --- /dev/null +++ b/su-lim/W3/network.py @@ -0,0 +1,45 @@ +# 프로그래머스 - 네트워크 +# network.py + +network = [] +visited = [] + +def recursive(p): + result = [] + global network + global visited + + if(visited[p]): + return [] + else: + visited[p] = 1 + + # 빈 리스트는 for문 안들어가고 바로 빈리스트 반환 + for nw in network[p]: + result += ([nw] + recursive(nw)) + return result + +def solution(n, computers): + answer = 0 + start = 0 + + global visited + visited = [0] * n + + #컴퓨터별 연결정보 리스트 저장 + global network + network = [[]] * n + + for idx, computer in enumerate(computers): + network[idx] = [i for i, value in enumerate(computer) if idx != i and value==1] + if computer.count(1) == 1: #다른 컴퓨터와 연결이 없는 컴퓨터일 경우 + visited[idx] = 1 + answer += 1 + + while(visited.count(0)): # 모두 방문 했을 경우 종료 + result = recursive(start) + if(result): # 방문 했던 노드가 아니였을 때 네트워크 수 추가 + answer += 1 + start += 1 + + return answer \ No newline at end of file diff --git a/su-lim/W3/node.py b/su-lim/W3/node.py new file mode 100644 index 0000000..75d8f27 --- /dev/null +++ b/su-lim/W3/node.py @@ -0,0 +1,37 @@ +from collections import deque, Counter + +def get_node_list(n, edge): + + graph = [[] for i in range(n+1)] + + for e in edge: + graph[e[0]].append(e[1]) + graph[e[1]].append(e[0]) + + return graph + +def solution(n, edge): + answer = 0 + queue = deque([1]) + visited = [] + shortest = [0]*(n+1) #1로 부터의 최단 거리 저장 리스트, 0과 1 인덱스는 쓰이지 않음 + + # step1. 노드의 정보를 담은 2차원 배열 구현 (행-노드 인덱스)(열-노드에 연결된 다른 노드들(순서X)) + graph = get_node_list(n, edge) + + distance = 0 + # step2. + while(queue): + now = queue.popleft() + if now not in visited: + # print(now) + visited.append(now) + adj = graph[now] + for node in adj: + if not shortest[node] and node != 1: + shortest[node] = shortest[now] + 1 + queue += node + + answer = shortest.count(max(shortest)) + + return answer \ No newline at end of file diff --git a/su-lim/W3/spicy.py b/su-lim/W3/spicy.py new file mode 100644 index 0000000..7a7e95e --- /dev/null +++ b/su-lim/W3/spicy.py @@ -0,0 +1,23 @@ +# spicy.py +# 프로그래머스 - 더 맵게 + +# 모든 음식의 스코빌 지수가 K를 넘겼는지 판별 (안넘겼으면 True) +def notK(scoville, K): + if(scoville[0] < K): + return True + return False + +def solution(scoville, K): + answer = 0 + + scoville.sort() + + while(notK(scoville, K)): + answer+=1 + try: + scoville.append(scoville.pop(0) + (scoville.pop(0)*2)) + scoville.sort() + except: + return -1 + + return answer \ No newline at end of file