목록문제 풀이 (103)
honey_pot
https://school.programmers.co.kr/learn/courses/30/lessons/64064 확실히 3단계라 아이디어를 떠올리는 게 어렵다 re.sub를 이용해서 banned_id 내의 문자열 * 를 변경하긴 했는데 . 으로 변경해서 정규식의 아무 문자 1개를 의미하는 카드로 이용하는 건 생각 못했다 user_id 나 banned_id 길이가 8 이하라 순열 permutations를 써도 시간 초과가 나지 않는 점을 캐치했으면 더 수월했을 것이다 순서를 허용하지 않는 순열로 풀어야 하기 때문에 아이디를 정렬을 해주는 부분이 있어야 한다. list -> set 하는 방식은 거의 매번 검색하는 것 같다 ㅋㅋㅋㅋㅋㅋㅋ list..map...tuple... 기억하자 len 메소드로 길이 구..
https://school.programmers.co.kr/learn/courses/30/lessons/42884 딕셔너리에 넣고 values 제일 많은걸로 뽑으면 답이지 않을까 했는데 아니었다 진입보다는 진출 시간에 카메라를 설치해야 겹치는 경우가 많겠지 하고 코드를 변경하려던 찰나.. 1 2 3 4 5 6 7 8 9 10 from collections import defaultdict def solution(routes): answer = 0 table = defaultdict(list) for route in routes: inn, out = route[0], route[1] table[inn].append(out) table[out].append(inn) answer = sorted(table.i..
https://school.programmers.co.kr/learn/courses/30/lessons/12904 리트코드 5번 Longest Palindrome Substring 과 똑같은 문제다 다른 점은 문자열을 리턴하는게 아니라 문자열 길이를 리턴한다는 점 빼고는 다 같다 파이썬 알고리즘 인터뷰 공부할 때 풀었던 거라 투포인터 슬라이딩도 복습했다 홀수개의 문자열을 체크하는 포인터와 i, i+2 짝수개의 문자열을 체크하는 포인터 i, i+1 를 계속 움직여서 처음 팰린드롬을 발견한 순간부터 양쪽의 길이를 1씩 늘려가면서 팰린드롬인지 확인하는 형태이다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 def solution(s): if len(s)
https://school.programmers.co.kr/learn/courses/30/lessons/42898 분명히 다 풀었는데 제출하니까 답이 아니라는거임 진짜 어이없다 왜 안 맞는거야 하고 질문하기를 보니 아주 욕을 많이 먹는 문제였다 puddles로 주는 좌표가 x,y가 아니라 y,x 라고 해서 조건문에서 [i,j] -> [j,i]로 바꾸니까 해결됨 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12927 지수 특성상 밑 값이 커질수록 제곱값은 1,4,9,16... 처럼 무궁무진하게 커진다 그래서 낮은 야근시간을 줄이는 것보다 높은 시간을 줄여서 고르게 분포시키는 것이 우선이고 max 함수로 구하다간 리스트 길이 n번을 다 돌면서 시간 초과가 나므로 최소힙인 heapq를 (-값, 값)으로 구성하여 최대힙으로 사용하여 가장 큰 시간에서 계속 1을 빼준다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import heapq def solution(n, works): answer = 0 if sum(works)
https://school.programmers.co.kr/learn/courses/30/lessons/12938 이 문제는 진짜 문제 푸는 방법 찾기 단원에 나올법한 문제다 해결방법은 사탕 9개가 있는데 4명에게 최대한 골고루 나누어 주는 방법은? 이거랑 같은 것 같다 일단 4명에게 공평하게 9//4 = 2개씩 나눠주고(첫번째 for문) 나머지 한개는 한 명한테 준다(두 번째 for문) 나머지가 1 이상이면 1개씩 골고루 나눠주면 된다 그래서 사탕 s개 n명에게 최대한 골고루 나눠주기 로 해석하면 편하다 1 2 3 4 5 6 7 8 9 10 11 12 13 from functools import reduce def solution(n, s): if n > s: return [-1] answer = []..
https://school.programmers.co.kr/learn/courses/30/lessons/42628 리트코드에서 원형 큐, 이런저런 큐 구현하는 문제랑 비슷한 느낌이다 대신 리트코드에서는 큐도 stack으로 구현해보세요 이런 식이라 결이 좀 다른듯 deque 정렬, popleft, pop 메서드를 쓰면 문제 자체는 어렵지 않았다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from collections import deque def solution(operations): answer = [] q = deque() for operation in operations: o, p = operation.split(" ") if o == "I": q.append(int(p)) q ..
https://school.programmers.co.kr/learn/courses/30/lessons/43105 dp는 그림이나 식 안 쓰면 모르겠다.. dp 문제는 일단 dp[i] 부터 쓰고 봄 이 문제는 식이나 그림 자체는 쉬운데 dp 테이블을 삼각형 모양으로 그릴지 정사각 격자로 그릴지 고민했다 그냥 정사각 격자로 그리면 해결되는 문제였다 1 2 3 4 5 6 7 8 9 def solution(triangle): n = len(triangle) dp = [[0]*n for _ in range(n)] dp[0][0] = triangle[0][0] for i in range(n-1): for j in range(len(triangle[i])): dp[i+1][j] = max(dp[i+1][j], dp..