코딩문제풀이/프로그래머스 55

[Python] 길 찾기 게임

1. 문제 2. 풀이 과정 방법 1) 배열로 tree를 구성한 후, 순회 import sys sys.setrecursionlimit(10**6) class Node(object): def __init__(self, i, data_set): self.left_idx = -1 self.idx = i self.right_idx = -1 self.num = data_set[0] self.x = data_set[1] self.y = data_set[2] def pre_order(t, i, result): if i == -1: return result.append(t[i].num) pre_order(t, t[i].left_idx, result)#왼 pre_order(t, t[i].right_idx, result)#..

[Python] 후보키

1. 문제 2. 풀이 과정 from itertools import combinations def solution(relation): row = len(relation) col = len(relation[0]) answer = set() for i in range(1, col+1): for com in combinations(range(col), i): #속성들의 조합 #최소성 검사 minimality = True for a_tup in answer: if set(a_tup) & set(com) == set(a_tup): minimality = False break #최소성을 만족, 유일성 검사 if minimality: temp = set() for k in range(row): temp.add(tupl..

[Python] 실패율

1. 문제 2. 풀이 과정 def solution(N, stages): rate = [0]*(N+2) total = len(stages) #도전자 수 for stage in stages: rate[stage] += 1 result = [] for i, r in enumerate(rate[1:N+1], start = 1): if total == 0: result.append((0, i)) continue temp = rate[i]/total #실패율 total -= rate[i] #스테이지에 도달한 플레이어 수 result.append((temp, i)) return list(map(lambda x:x[1], sorted(result, key = lambda x:x[0], reverse = True)))

[Python] 오픈채팅방

1. 문제 2. 풀이 과정 def solution(record): user = {} result = [] for r in record: order = r.split() if order[0] == "Enter": user[order[1]] = order[2] result.append((order[1], "님이 들어왔습니다.")) elif order[0] == "Leave": result.append((order[1], "님이 나갔습니다.")) elif order[0] == "Change": user[order[1]] = order[2] answer = [] for uid, command in result: temp = user[uid]+command answer.append(temp) return answer

[Python] 방의 개수

1. 문제 2. 풀이 과정 방법 1) arrows를 하나씩 보면서 그 때마다 면이 생기면 count를 했다. 면이 생기는 경우는 크게 두 경우로 나눠볼 수 있다. 1. 이미 지나간 점(vertex)를 또 지나가는 경우 2. 다른 점으로 이동하면서 간선들 간에 교점이 생기는 경우 두 경우는 동시에 발생할 수도 있어서 if를 두 번 사용하여 계산하였다. 여기서 주의해야 할 점은 이미 지나간 간선을 다시 지나가면서 중복 count되지 않도록 해야 한다. 코드에서는 지금 지나가는 간선이 edg에 있는지 확인하는 걸로 중복되지 않도록 했다. def solution(arrows): answer = 0 dxy = [(0, 1), (1, 1), (1, 0), (1, -1), (0, -1), (-1, -1), (-1, ..

[Python] 순위

1. 문제 2. 풀이 과정 방법 1) 자신의 앞과 뒤에 있는 선수 수의 합이 n-1개면 정확한 순위를 알 수 있다. 한 노드씩 차례대로 살펴보면서, 자신을 이긴 선수와 진 선수의 수를 구한다. 자신을 이긴 선수를 stack에 넣고 꺼내서 그 선수를 이긴 선수들까지 계속 count해나간다. def ncount(n, g, start): visited = [False]*n stack = [start] visited[start] = True while stack: n = stack.pop() for i in g[n]: if not visited[i]: visited[i] = True stack.append(i) return visited.count(True)-1 def solution(n, results): g..

[Python] 가장 먼 노드

1. 문제 2. 풀이 과정 방법 1) heapq 이용, 방법 2)를 추천 import heapq as hq def solution(n, edge): answer = 0 graph = [[] for _ in range(n+1)] distance = [int(1e9)]*(n+1) for x, y in edge: graph[x].append(y) graph[y].append(x) q = [] hq.heappush(q, (0, 1)) #최소거리, 시작노드 번호 distance[1] = 0 while q: d, node = hq.heappop(q) for n in graph[node]: if distance[n] == int(1e9): #방문하지 않은 노드라면 hq.heappush(q, (d+1, n)) dist..