알고리즘(8)
-
[백준 / BOJ] 17114번 하이퍼 토마토 (Javascript / Node js)
https://www.acmicpc.net/problem/17114문제 해설이번 하이퍼 토마토 문제는 지난 토마토 문제에서 배열의 깊이가 2차원에서 11차원으로 변형된 심화 문제입니다. [백준 / BOJ] 7576번 토마토 ( Node js / Javascript )https://www.acmicpc.net/problem/7576 문제 풀이토마토는 BFS의 대표 문제들 중 하나입니다. 만약 BFS 혹은 그래프 탐색 자체에 대한 지식이 부족하다면 아래 링크를 참고하시길 바랍니다. 너비 우선 탐dnd0707.tistory.com 언뜻 보기에는 11차원이라는 말도 안되는 조건 때문에 괴랄해 보이겠지만 사실은 보이는 것 만큼의 난이도를 가진 문제는 아닙니다. 만약 만약 x축이 이동할 때 동시에 y축도 이동이..
2024.05.26 -
동적 계획법 (Dynamic Programming)
1. 동적 계획법이란?동적 계획법이란 해결하고자 하는 문제를 작은 문제로 나누어 해결하고, 작은 문제들의 해들로부터 큰 문제의 답을 구하는 방식입니다. 여기서 중요한 점은 "분할과 정복"과 달리 DP는 분할된 작은 문제들이 상호 독립적이지 않고, 일정 부분을 공유한다는 점입니다. 본인은 편의점 알바를 하고있습니다. 그리고 저는 항상 출근하면 가장 먼저 담배 재고를 조사합니다. 담배를 꺼내 세다보면 맨 오른쪽처럼 10개가 넘어가는 재고들이 종종 있는데, 이런 경우에는 한눈에 몇개인지 들어오지도 않고 이런 것들을 하나하나 다 세다보면 재고 조사에 쓰는 시간이 꽤 길어집니다. 그렇다고 대충 눈대중으로 세고 넘어가기에는 여간 찝찝한게 아니죠.사진 속 모든 담배의 개수를 세야한다고 가정해볼까요? 세줄로 나누어 ..
2024.05.26 -
[백준 / BOJ] 7576번 토마토 ( Node js / Javascript )
https://www.acmicpc.net/problem/7576 문제 풀이토마토는 BFS의 대표 문제들 중 하나입니다. 만약 BFS 혹은 그래프 탐색 자체에 대한 지식이 부족하다면 아래 링크를 참고하시길 바랍니다. 너비 우선 탐색(BFS)와 깊이 우선 탐색(DFS)BFS(Breadth-First Search)와 DFS(Depth-First Search)는 그래프 탐색 알고리즘의 두 가지 주요 유형으로, 그래프의 데이터를 탐색하는 데 사용됩니다. 이 두 알고리즘을 이해하기 위해서는 그래프가 무엇인dnd0707.tistory.com 본인이 떠올린 문제 해결 방안은 다음과 같습니다.1. 배열을 순회하며 1의 위치들 즉, 시작점들을 큐에 넣어준다.2. 시작점들이 담겨있는 큐로 BFS를 실행한다. 방문 ..
2024.05.22 -
너비 우선 탐색(BFS)와 깊이 우선 탐색(DFS)
BFS(Breadth-First Search)와 DFS(Depth-First Search)는 그래프 탐색 알고리즘의 두 가지 주요 유형으로, 그래프의 데이터를 탐색하는 데 사용됩니다. 이 두 알고리즘을 이해하기 위해서는 그래프가 무엇인지에 대한 개념이 선행되어야 합니다. 그래프에 대한 개념이 부족하신 분들은 아래 포스팅을 참고해주시면 감사하겠습니다. 그래프 ( Graph ) 탐색 이론1. 그래프의 구성요소 그래프의 기본 구성 요소는 정점(Vertex, 혹은 노드(Node))과 간선(Edge)입니다. 정점은 그래프의 기본 단위로, 위치나 상태 등을 나타낼 수 있고, 간선은 두 정점을 연결하는 선dnd0707.tistory.com 너비 우선 탐색 (BFS)너비 우선 탐색 (BFS) 는 그래프의 시작 정점에..
2024.05.18 -
재귀 함수 (recursive function) 의 동작
1. 재귀 함수란? 코드 내에서 본인을 호출하는 함수를 재귀함수라고 한다. 하지만 단순히 아래와 같이 자기 자신을 호출만 한다면 함수는 위 송강호씨처럼 영원히 자기 자신을 호출하기를 반복하게 될 것이다. function recursive() { recursive(); } recursive(); 이를 방지하기 위해서 재귀함수는 코드 내에 탈출 조건을 포함하고 있어야 하고, 본인을 호출할 때마다 입력 파라미터가 탈출 조건에 수렴하는 양상으로 변화해야 한다. function recursive(n) { if(n < 0){ //탈출 조건 return; } recursive(n - 1); //변화하는 파라미터, 0으로 수렴 } recursive(5); 2. 반복문 vs 재귀 함수 대부분의 재귀 함수 동작은 변수값을..
2024.04.13 -
[백준 / BOJ] 1107번 리모컨 ( Node js / Javascript )
1107번: 리모컨첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼이www.acmicpc.net 문제 풀이 고장나지 않은 버튼들만을 이용해서 목표 채널까지 버튼을 가장 적게 눌러 도착하면 된다. 그런데 입력 조건을 보면 목표 채널의 최대값이 500,000인 것을 확인할 수 있다. 즉, 채널을 1부터 하나씩 모두 검사해도 처리시간이 매우 적게 나온다는 것이다.그렇다면 이 문제는 브루트포스를 사용해 손쉽게 해결할 수 있을 것 같다. 그렇다면 우리는 최악의 경우인 목표 채널이 500,000 번이고, 9를 제외한 모든 숫자가 고장났다고 했을 때를 감..
2024.03.29