목록알고리즘 문제 (44)
배고픈 개발자 이야기
Easy난이도 Acceptence 68.5%의 문제 자료구조의 Binary Tree의 가장 깊은 Depth를 구하는 문제로 아래의 getDepth 함수는 result 리스트에 리프노드의 depth의 집합으로 max값을 구하여 해결 class Solution(object): def getDepth(self, node, depth): result = [] if node.left is not None: result.extend(self.getDepth(node.left, depth+1)) if node.right is not None: result.extend(self.getDepth(node.right, depth+1)) if node.left is None and node.right is None: res..
Easy 난이도 문제로 Acceptence 48.8%의 문제 계단을 1칸 or 2칸씩 오르는 방법을 구하는 문제로 가능한 모든 경우의 수를 구하는 문제다. 수학의 경우의 수를 구하는 기호인 nCr을 함수로 만들어 모든 경우의 수를 구한다. class Solution(object): def __init__(self): self.caseSum = 0 def nCr(self, n, r): denominator = numerator = 1 for x in range(n-r+1, n+1): numerator *= x for x in range(1, r+1): denominator *= x return numerator//denominator def climbStairs(self, n): """ :type n: i..
def solution(stones, k): answer, length = 0, len(stones) while True: loc = -1 while True: if loc >= length: #건널수 있는 인원 추가 answer += 1 break flag = 0 for i in range(1, k+1): if loc+i >= length: # 도착할 수 있으면 loc = length flag = 1 break if stones[loc+i] > 0: #현재 위치에서 건널수 있는 디딤돌이 있으면 stones[loc+i] = stones[loc+i] - 1 loc = loc+i flag = 1 break if flag == 0: # 건널 수 있는 돌이 없으면 return answer print(soluti..
def solution(k, room_number): ret = [] rooms = dict() for i in room_number: reserve = i while True: if reserve in rooms: reserve += 1 else: rooms[reserve] = 1 ret.append(reserve) break return ret 풀이 1. 방번호 리스트를 생성한 후 원하는 방이 있으면 방을 주고 리스트에서 지워준다. 2. 방이 없을시 남은 방중에서 원하는 방보다 큰번호의 방을 주고 마찬가지로 리스트에서 지워준다. 위의 풀이법은 정확성은 100%지만 효율성은 다 실패했다. 다른사람이 푼걸 보고, 다시 풀어보자. 다른사람의 풀이 재귀로 푸는 방법과 재귀를 루프로 풀어 푸는 방법이 있다. ..
def nCr(temp, number, matched_group): global result if len(temp) == len(matched_group): temp = set(temp) if temp not in result: result.append(temp) return else: for j in range(len(matched_group[number])): if matched_group[number][j] not in temp: temp.append(matched_group[number][j]) nCr(temp, number+1, matched_group) temp.pop() result = [] def solution(user_id, banned_id): global result matched_..
import re def solution(s): tmp, answer = [], [] for x in s.split("}"): elem = list(map(int, re.findall('\d+', x))) if elem != []: tmp.append(elem) tmp.sort(key=lambda x : len(x)) for x in tmp: for y in x: if y not in answer: answer.append(y) return answer 풀이 input으로 주어진 집합이 표현하는 튜플을 구하는 문제로 설명과 예제를 보고 규칙을 이해하였다. 1. 주어진 문자열을 원소단위로 잘라주기 위해 "}"로 나누었고, 원소를 다시 정수리스트로 변환하여 저장하였다. 2. 원소의 크기순서로 정렬한 후 튜플..
def solution(board, moves): tmp, answer = [], 0 while len(moves): for i in range(len(board)): if board[i][moves[0]-1] != 0: # 인형이 있는 경우 tmp.append(board[i][moves[0]-1]) board[i][moves[0]-1] = 0 moves.remove(moves[0]) break elif i == len(board)-1: moves.remove(moves[0]) # 인형이 없는 경우 if tmp == []: return 0 while True: before = answer for i, _ in enumerate(tmp[:len(tmp)-1]): if tmp[i] == tmp[i+1]: d..
문제 설명 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. 제한사항 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다. 각 컴퓨터는 0부터 n-1인 정수로 표현합니다. i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[..