목록문제 풀이 (103)
honey_pot
https://school.programmers.co.kr/learn/courses/30/lessons/86971 defaultdict에 노드별로 모든 엣지의 경우들을 정리한 후에 dfs를 안 쓰고 노드 수가 1인 leaf 노드부터 다 쳐내고 맨 마지막에 남는 노드가 간선이 잘리는 루트 노드라는 걸 이용해서 풀려고 했는데 거기에서 결국 서로 연결된 노드를 저장하고 길이를 구하려면 dfs가 되지 않나...? 라는 생각에 dfs로 돌아갔다 dfs + 트리 문제는 다시 풀어보기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import collections def solution(n, wires): if n
https://school.programmers.co.kr/learn/courses/30/lessons/87390 이 문제...뭘까? 푼 사람들 패턴 유추의 천재들인걸까 시간 초과 1 -> 이건 예상함 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def solution(n, left, right): # 1. n행 n열 크기의 비어있는 2차원 배열 grid = [[0 for _ in range(n)] for _ in range(n)] grid[0] = [i for i in range(1,n+1)] 2. 1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채우기 for i in range(n): # for j in range(i+1): # 0부터 i 까지 if g..
https://school.programmers.co.kr/learn/courses/30/lessons/12985 for문으로 i, i+1 쌍으로 값을 비교하고 step=2 로 증가할까 생각했다가 left, right로 인덱싱을 생각하는게 더 직관적일 것 같아서 변경 어차피 같은 아이디어이니까 for문으로 해도 상관은 없다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import math def solution(n, a, b): answer = 0 players = [i for i in range(1, n + 1)] # 1부터 n까지 선수 등록 rounds = int(math.log2(n)) # 총 라운드 수 n = 2^m 에서 m fo..
https://school.programmers.co.kr/learn/courses/30/lessons/17683 #이 붙은 음들을 어떻게 가려낼 것인가가 정말 떠오르지 않았던 문제다 처음엔 단순히 m in music 이런식으로 풀었는데 기본 테케는 통과하지만 제출 시 테케는 박살났다. 포인터로 하나하나 가리켜보나 이런 생각도 했지만 반나절 고민하고 힌트 구글링 그리고 조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다. 이 조건을 지킨다고 sort() 의 키에 첫번째로 재생된 시간, 두 번째로 실행된 노래 순서 인덱스를 주고 reverse=True 옵션을 안 줘서 한번 틀리고 reverse=True..
https://school.programmers.co.kr/learn/courses/30/lessons/17686 deque popleft를 이용해 앞부터 판별해서 head와 number를 구성해보려고 했더니 숫자가 뒤에 한번 더 나오는 파일명일 경우 머리 복잡해진다 re 의 match, search 기능을 사용하면 간단하게 풀수 있다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import re def solution(files): src = [] # 정렬에 사용할 소스(헤드,넘버), 마지막에 순서대로 files의 요소를 지정할 인덱스 저장 for idx,file in enumerate(files): file = file.lower() # file 내 영문자 모두 소문자로..
https://school.programmers.co.kr/learn/courses/30/lessons/92341 12345678910111213141516171819202122232425262728import mathfrom collections import defaultdict def solution(fees, records): table = defaultdict(list) for idx in range(len(records)): time, number, code = records[idx].split() minutes = int(time[:2]) * 60 + int(time[3:]) # 시간을 모두 분으로 바꾸어 저장 table[number].append(minutes) # 입차-출차 순서로 저장되기..
https://school.programmers.co.kr/learn/courses/30/lessons/12909 리트코드 20번 문제 Valid Parentheses와 같은 문제 (괄호 종류만 적다) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 def solution(s): dic = { ')':'(' } if len(s) % 2 != 0: return False stack = [] for char in s: if char not in dic: stack.append(char) elif stack and dic[char] != stack.pop(): return False return len(stack) == 0 cs
https://school.programmers.co.kr/learn/courses/30/lessons/12913 DP 문제 dp 테이블을 만들어서 풀까하다가 그럴 필요 없을 것 같아서 그냥 주어진 배열에 계산했다 12345678def solution(land): for i in range(1,len(land)): land[i][0] += max(land[i-1][1],land[i-1][2],land[i-1][3]) land[i][1] += max(land[i-1][0],land[i-1][2],land[i-1][3]) land[i][2] += max(land[i-1][1],land[i-1][0],land[i-1][3]) land[i][3] += max(land[i-1][1],land[i-1][2],lan..