목록Development/Algorithm & Coding Test (189)
컴공생의 다이어리
[프로그래머스] 전력망을 둘로 나누기 - 파이썬(Python) from collections import defaultdict, deque def bfs_and_node_count(del_line, n, wire_dict): # bfs 수행과 연결된 노드수 구하기 count = 1 # 연결된 노드 수 visited = [False] * (n + 1) # 방문여부 체크 visited[del_line[0]] = True # 시작 노드 방문 처리 queue = deque([del_line[0]]) while queue: # bfs 수행 curr = queue.popleft() for i in wire_dict[curr]: # curr 노드와 연결된 노드에 대해서 if visited[i] or i == del_..
[프로그래머스] 피로도 - 파이썬(Python) from itertools import permutations def solution(k, dungeons): answer = 0 len_dungeons = len(dungeons) for permu in permutations(dungeons, len_dungeons): # 순열로 경우를 만들어줌 temp_k = k # k는 그대로 보존하기 위해 temp_k를 k로 초기화 하고 사용 count = 0 # 던전 수 for p in permu: if temp_k >= p[0]: # 최소 필요 피로도가 있는지 확인 temp_k -= p[1] # 소모 피로도 빼주기 count += 1 # 던전 수 업데이트 answer = max(answer, count) # 최..
백준 12761번 : 돌다리 (문제 바로가기) 내 코드 from collections import deque # a, b : 스카이 콩콩의 힘 # n : 동규의 현재 위치 # m : 주미의 현재 위치 a, b, n, m = map(int, input().split()) dp = dict() # 각 돌의 최소 이동 횟수 dp[n] = 0 queue = deque([n]) # n에서 시작 while queue: # bfs 수행 curr = queue.popleft() for i in {1, -1, a, -a, b, -b}: # +1칸, -1칸, +A칸, -A칸, +B칸, -B칸 이동 val = curr + i if 0
[프로그래머스] 스킬트리 - 파이썬(Python) def solution(skill, skill_trees): answer = 0 for tree in skill_trees: s = '' for i in tree: if i in skill: # 선행스킬에 포함된다면 s += i if skill[:len(s)] == s: # skill의 앞부터 s의 길이만큼 s와 같다면 answer += 1 # 가능한 스킬트리 return answer https://programmers.co.kr/learn/courses/30/lessons/49993 코딩테스트 연습 - 스킬트리 programmers.co.kr
[프로그래머스] 소수 만들기 - 파이썬(Python) from itertools import combinations def solution(nums): answer = 0 for i in combinations(nums, 3): s = sum(i) chk = True for j in range(2, int(s ** 0.5) + 1): if s % j == 0: chk = False break if chk is True: answer += 1 return answer https://programmers.co.kr/learn/courses/30/lessons/12977 코딩테스트 연습 - 소수 만들기 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 ..
[프로그래머스] 괄호 변환 - 파이썬(Python) from collections import deque def separate_u_v(p): # 문자열 p를 u와 v로 분리 # u : 균형잡힌 괄호 문자열, v : 나머지 open_p, close_p = 0, 0 for i in range(len(p)): if p[i] == '(': open_p += 1 else: close_p += 1 if open_p == close_p: return p[:i + 1], p[i + 1:] # u, v def check_balance(u): # 문자열 u가 올바른 괄호 문자열인지 체크 stack = deque() for i in u: if i == '(': stack.append(i) else: if not stack..
[프로그래머스] 문자열 압축 - 파이썬(Python) def solution(s): answer = len(s) for step in range(1, len(s) // 2 + 1): comp = '' prev = s[0:step] count = 1 for i in range(step, len(s), step): if prev == s[i:i + step]: count += 1 else: comp += str(count) + prev if count >= 2 else prev prev = s[i:i + step] count = 1 comp += str(count) + prev if count >= 2 else prev answer = min(answer, len(comp)) return answer htt..
[프로그래머스] 입국심사 - 파이썬(Python) def solution(n, times): answer = 0 left, right = 1, min(times) * n while left = n: break if people >= n: answer = mid right = mid - 1 elif people < n: left = mid + 1 return answer https://programmers.co.kr/learn/courses/30/lessons/43238 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 programmers.co..
[프로그래머스] 영어 끝말잇기 - 파이썬(Python) def solution(n, words): length = len(words) for i in range(1, length): if words[i - 1][-1] != words[i][0]: return [i % n + 1, i // n + 1] elif words[i] in words[:i]: return [i % n + 1, i // n + 1] elif len(words[i]) == 1: return [i % n + 1, i // n + 1] return [0, 0] https://programmers.co.kr/learn/courses/30/lessons/12981 코딩테스트 연습 - 영어 끝말잇기 3 ["tank", "kick", "know..
[프로그래머스] 비밀지도 - 파이썬(Python) def solution(n, arr1, arr2): answer = [] for i, j in zip(arr1, arr2): temp = str(bin(i | j)[2:]).rjust(n, '0') temp = temp.replace('1', '#') temp = temp.replace('0', ' ') answer.append(temp) return answer https://programmers.co.kr/learn/courses/30/lessons/17681 코딩테스트 연습 - [1차] 비밀지도 비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는..