전체 글

As much as I desire.
미로 찾기 문항은 BFS를 이용했을 때 매우 효과적으로 해결할 수 있다. Why? : BFS는 시작 지점에서 가까운 노드부터 차례대로 그래프의 모든 노드를 탐색하기 때문이다. 그러므로 (1,1)지점에서부터 BFS를 수행하여 모든 노드의 값을 거리 정보로 넣으면 된다. 특정한 노드를 방문하면 그 이전 노드의 거리에 1을 더한 값을 리스트에 넣는다. from collections import deque # N, M을 공백으로 구분하여 입력받기 n, m = map(int,input().split()) # 2차원 리스트의 맵 정보 입력받기 graph = [] for i in range(n): graph.append(list(map(int,input()))) # 이동할 네 방향 정의(상,하,좌,우) dx = [-..
DFS/BFS 는 그래프를 탐색하기 위한 대표적인 두 가지 알고리즘이다. 탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미한다. 프로그래밍에서는 그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 자주 다룬다. 대표적인 탐색 알고리즘으로 DFS와 BFS가 있다. DFS와 BFS를 제대로 이해하려면 기본 자료구조인 스택과 큐에 대한 이해가 전제되어야 한다. 자료구조란 '데이터를 표현하고 관리하고 처리하기 위한 구조'를 의미한다. 그중 스택과 큐는 자료구조의 기초 개념으로 다음의 두 핵심적인 함수로 구성된다. 삽입(Push): 데이터를 삽입한다. 삭제(Pop): 데이터를 삭제한다. 스택 (~=박스 쌓기) 스택은 선입후출(First In Last Out)구조 또는 후입선출(Last In ..
알고리즘 분류) 이분탐색, 매개 변수 탐색 *매개 변수 탐색(Parametric Search): 이분 탐색을 사용하여 조건을 만족하는 최대값을 구하는 방법이다. *Parametric Search의 Detail은 https://stopmin.tistory.com/31 여기 정리해 놨음. Solution) 이진탐색의 정의에 맞게 일단 비교해야 하는 값들을 sorted해서 House에 정리해줬다. start, end 포인트를 1과 가장 멀리 떨어져있는 집 사이의 거리로 설정했다. 그리고 이제 while (start count += 1로 간다. 그리고 if count 가 C보다 커질 경우에는 (start+end)값이 작기 때문이기에 start point를 mid + 1로 바꿔준다. 그리고 result = mid..
파라메트릭 서치는 최적화 문제를 결정 문제로 바꾸어 해결하는 기법이다. '원하는 조건을 만족하는 가장 알맞은 값을 찾는 문제'에 주로 파라메트릭 서치를 사용한다. 이 풀이의 아이디어는 '현재 상황에서 조건을 만족할 수 있는가?'를 확인한 뒤 조건의 만족 여부('Yes' or 'No)에 따라서 탐색 범위를 좁혀서 해결할 수 있다. 이 범위를 좁힐 때에 이진 탐색의 원리를 이용하여 절반씩 탐색 범위를 좁혀나간다.
그리디 알고리즘이란, 단순하지만 강력한 문제 해결 방법이다. 이 유형은 "탐욕법"이라 소개되기도 하는데, 어떠한 문제가 있을 때 단순 무식하게, 탐욕적으로 문제를 푸는 알고리즘이다. 여기서 "탐욕적"이라는 말은 '현재 상황에서 지금 당장 가장 좋은 것만 고르는 방법"을 의미한다. 그리디 알고리즘을 이용하면 매 순간 가장 좋아보이는 것을 선택하며, 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다. 출제 동향 이 유형은 '사전에 외우고 있지 않아도 풀 수 있을 가능성이 높은 문제 유형'이라는 특징이 있다. 다만, 그리디 알고리즘 자체가 문제 출제의 폭이 매우 넓기 때문에, 다익스트라 알고리즘과 같이 특이 케이스를 제외하고는 단순 암기를 통해 모든 문제를 대처하기는 어렵다. 그리디 알고리즘 유형의 ..
이진탐색이 시간초과 해결의 Point였다. 처음에 이 문제를 우당탕탕 풀었을 때는 Case의 답 중 가장 큰 값에서 -1씩 해서 모두 돌려보는 과정으로 이 문제를 해결해보았다. 그러나 시간초과가 나왔다. 다른사람들 코드를 구경하다보니, start,end,mid가 있길래 '어 이거 이진탐색문항이구나..' 깨닫게 되었다. 알고보니 이진탐색을 활용하면 빠르게 풀이되는 문항이었다. 이진탐색은 https://stopmin.tistory.com/28 에 간단하게 정리해두었다! 내가 처음 짠 코드들은 둘 다 순차탐색을 활용한 코드였기에 시간초과가 나올 수 밖에 없었다. 내가 처음 짠 2개의 시간초과 코드들) import sys K, N = map(int,sys.stdin.readline().split()) strin..
지미닝
지민 개발 블로그