📎 문제링크https://school.programmers.co.kr/learn/courses/30/lessons/86971🤔 문제 이해 및 알고리즘 유형알고리즘 유형- 완전 탐색💡 문제 해결 방법💻 코드def solution(n, wires): answer = 100 test = [[wires[i] for i in range(len(wires)) if i != j] for j in range(len(wires))] # 전선 하나씩 끊어보기 for wire in test: graph = [[] for _ in range(n)] # 인접 리스트 생성 visited = [False] * n for w in wire: gr..
📎 문제링크 순서대로 방문하기 🤔 문제 이해 및 알고리즘 유형 방문해야하는 좌표가 주어지면 순서대로 방문 할 수 있는 모든 경우의 수를 구하는 문제 알고리즘 유형 DFS(완전 탐색) 💡 문제 해결 방법 (1) dfs를 통해 완전탐색을 실시한다. 이때 index +1 해주면서 순차적으로 탐색하면서 dfs를 진행한다. (1-1) 만약 index가 도착점, 즉 m-1일 경우에는 cnt+=1을 해주고 return 한다. (1-2) 아닐 경우 index+1을 진행한다. (2) visit[x][y]=True를 실행해준다. 상하좌우 탐색을 시작한다. 이때 x,y는 n안에 있어야 하고 방문하지 않은 노드여야 하며 벽(1)이 아니여야 한다. (2-1) 위 조건을 충족 시키면 상하좌우 시킨 x,y를 넣어서 dfs를 다시 ..
📎 문제링크 자동차 테스트 🤔 문제 이해 및 알고리즘 유형 자동차 연비가 주어졌을 때 q 줄에 주어진 연비가 중간점이 될 수 있는 경우의 수 모두 출력하는 문제 알고리즘 유형 이분 탐색 💡 문제 해결 방법 (1) 자동차 연비를 리스트로 입력받고 정렬 (2) q줄에 주어진 연비를 입력받음(mid)과 동시에 탐색 진행 (2-1) q줄에 주어진 연비가 리스트에 없는 경우 print(0) (2-2) 2-1 경우가 아닌 경우 mid 왼쪽의 있는 연비의 갯수를 구하고 print(왼쪽 연비개수 x 오른쪽 연비 갯수) 💻 코드 (1) 처음 코드 - 시간 초과 import sys input = sys.stdin.readline n,q = map(int,input().split()) car = sorted(list(map..
📎 문제링크 백준 3055번 🤔 문제 이해 및 알고리즘 유형 비버와 물이 동시에 상하좌우로 이동한다. 이때 1) 비버는 물과 바위를 뛰어 넘을 수 없음 2) 물은 둥지와 바위를 덮을 수 없음 결과적으로 비버가 둥지에 도착하는 가장 최소 시간을 구하는 문제 알고리즘 유형 BFS 💡 문제 해결 방법 물과 비버가 동시에 이동해야 하기 때문에 큐를 2개로 설정해서 저장 1) roadmap을 먼저 탐색하면서 물이 나오면 water 큐에 삽입 2) 비버의 위치가 나오면 start 지점으로 저장 or q(큐)에 삽입 3) D(둥지의 위치)가 나오면 end 지점으로 저장 bfs를 수행 -> 비버와 물이 동시에 이동하는게 포인트!! 1) 물을 따로 bfs 수행 2) 비버도 따로 bfs 수행 💻 코드 처음 작성한 코드 i..
📎 문제링크 백준 7569번 🤔 문제 이해 및 알고리즘 유형 상자 안에 있는 토마토가 모두 익는 날짜를 출력하는 문제 단, 상하좌우,위아래에 접해 있는 토마토만 익을 수 있으며, 모두 익는데 가장 최소한의 날짜를 출력하는 문제 알고리즘 유형 BFS 💡 문제 해결 방법 BFS로 문제를 푸는 것은 알았지만 DAY를 어떻게 계산해줘야 할지 몰라 어려웠다. 생각하지 못한 점 1) 익은 토마토의 좌표를 true_deque에 저장할 것 2) 익지 않은 토마토의 갯수를 unripe에 저장할 것 3) 처음상태에서- 토마토가 모두 다 익었을 상황, 익은 토마토가 없는 상황 고려 4) bfs를 다 돌린 상태에서 - 토마토가 모두 다 익었을 상황에는 day를 출력, 다 돌렸음에도 익지 않은 토마토가 있을 경우 -1 출력 5..
📎 문제❌ LeetCode group-anagrams 🤔 문제 이해 group-anagram이란? 문자를 재배열하여 다른 뜻을 가진 단어로 바꾸는 것 이 문제에서는 단어를 재배열 했을 때 같은 단어를 묶어서 출력하는 문제 💡 문제 해결 방법 list를 정렬함 딕셔너리를 사용한다. 2-1. 이때 딕셔너리 사용을 해서 정렬한 단어가 없으면 딕셔너리에 추가하고 2-2. 있으면 리스트로 추가 딕셔너리를 list로 바꿔서 출력함 💻 코드 class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: # str==1이거나 str가 0일 때 return result = {} for word in strs: test = "".join(sorte..