🧩 문제 : 14713번 앵무새 💪🏻 문제 풀이 첫번째 - 시간 초과 // 시간 초과 from collections import deque N = int(input()) arr = list() for i in range(N): arr.append(deque(map(str, input().split()))) sentence = deque(map(str, input().split())) def is_possible(sentence, arr): k = 0 while sentence: if arr[k] and sentence[0] == arr[k][0]: sentence.popleft() arr[k].popleft() k = (k + 1) % N if not sentence: return True else: r..
🧩 문제 : 1484번 다이어트 👩🏻💻 문제 정리 💪🏻 문제 풀이 투포인터 이용하기 while True: diff = left**2 - right**2 # left : 현재 몸무게, right = 기억하고 있는 몸무게 if left - right == 1 and diff > g: break if diff > g: right+=1 elif diff right 2. g는 음..
🧩 문제 : 1325번 효율적인 해킹 👩🏻💻 문제 정리 해커가 컴퓨터 N개가 존재하는 회사를 해킹하려고 한다. 컴퓨터 N개는 각각 M개의 신뢰 관계가 존재한다. 위 예시를 보면, 회사에는 5개의 컴퓨터가 존재하고 4개의 신뢰 관계가 존재한다. 각각의 신뢰 관계를 고려해보면 컴퓨터 1, 2를 해킹했을 때 3, 4, 5까지 해킹 할 수 있다. 💪🏻 해결 방법 1️⃣ BFS 이용하기 1. 신뢰하는 컴퓨터 인접 리스트 정의 n, m = map(int, input().split()) # n : 컴퓨터 개수, m : 연관관계 개수 graph = [[] for _ in range(n+1)] # 컴퓨터는 1 ~ n번까지 번호가 매겨져 있음 2. 전체 컴퓨터를 각각 BFS처리 (q가 빌 때 까지) - 신뢰받는 컴퓨터가..
🧩 문제 : 2156번 포도주 시식 👩🏻💻 문제 정리 테이블에 포도주가 잔이 담긴 잔이 순서대로 n개 있다. 각 잔마다 포도주의 양이 다르다. 이때 가장 가장 많이 마실 수 있는 포도주의 양을 구하는 문제이다. 위 예시를 보면, 6개의 잔이 있고 각각 포도주가 6, 10 , 13, 9, 8, 1만큼 담겨있다. 이 때 첫번째 잔, 두 번째 잔, 네 번째 잔, 다섯 번째 잔을 선택할 때 포도주를 가장 많이 마실 수 있다. 💪🏻 해결 방법 1️⃣ DP 이용하기 1. 테이블 정의하기 2. 점화식 찾기 연속으로 세잔을 마실 수 없음을 이용해 다음과 같이 점화식을 작성하였다. 3. 초기값 정하기 정답 코드 import sys input=sys.stdin.readline n = int(input()) # 잔의 수 ..
이 글은 이것이 취업을 위한 코딩테스트다를 읽고 개인적으로 공부한 내용을 정리한 글입니다 :> with .. 내가 만든 그림 👻 다이나믹 프로그래밍 사용 가능 조건 1. 큰 문제를 작은 문제로 나눌 수 있다. 2. 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다. 문제 풀이 방법 1. 테이블 정의하기 2. 점화식 찾기 -> 인접한 항들 사이의 관계식 3. 초기식 정하기
🧩 문제 : 7983번 내일 할거야 👩🏻💻 문제 정리 여기서 신경써야할 부분! 과제 a와 과제 c를 8일에 모두 할 수 없음. 즉 하루에 한 과제만 수행 가능함 따라서 과제 a를 하루 일찍 시작해야함 💪🏻 해결 방법 1️⃣ 내가 생각한 풀이방법 1. 마감 기한을 느린 순서대로 정렬하자. 2. 정렬한 과제 목록을 차례대로 마감 기한과 소요 시간을 고려하여 자유 시간을 갱신하자. - 마감 기한이 자유 시간보다 작거나 같다면 마감 기한을 자유 시간으로 갱신 - 마감 기한이 자유 시간보다 크다면 마감 기한을 현재 마감 기한에서 소요시간을 뺀 값으로 갱신 3. 최종 자유시간을 출력하면 끝 정답 코드 import sys input=sys.stdin.readline n = int(input()) # N : 과제 개..