[BOJ] 백준 1913 달팽이 (JAVA)
Algorithm/- Baekjoon2024. 1. 15. 01:58[BOJ] 백준 1913 달팽이 (JAVA)

📑 문제 🌱 아이디어배열의 숫자가 시작되는 자리를 지정하고,오른쪽 상단 -> 오른쪽 하단, 오른쪽 하단 -> 왼쪽 하단, 왼쪽 하단 -> 왼쪽 상단, 왼쪽 상단 -> 오른쪽 상단으로 이동하는 규칙에 맞게 구현해 보자. 이 규칙을 찾는 건 크게 어렵지 않았다 다만 신경 써야 하는 부분은 한 칸씩 줄어들면서 탐색하는 범위를 지정하는부분이다. 여러 부분을 신경 써야 하니 코드에 주석을 달아놨으니 자세히 읽으면서 풀면 된다!  🌱 코드 및 풀이가장 처음 숫자는 배열의 0,0에서 시작한다. 줄어든 후는 1,1 그 후는 2,2 이렇게 배열중앙을 향해서 증가하는 모습을 볼 수 있다.maxN = 1이 될 때까지 반복하고 range를 통해 줄어든 범위까지 탐색할 수 있게 설정한다. 즉 우리는 가창 처음 숫자가 시작..

[BOJ] 백준 2805 나무 자르기 (JAVA)
Algorithm/- Baekjoon2023. 12. 29. 06:46[BOJ] 백준 2805 나무 자르기 (JAVA)

📑 문제🌱 아이디어입력되는 나무의 양(N)은 1 ≤ N ≤ 1,000,000, 즉 O(n^2)을 가지는 알고리즘이 아닌  O(N)또는 더 빠른 알고리즘을 사용해야 한다. 만약 M미터의 나무를 가져가기 위해서 1~1,000,000까지의 높이를 나이브하게 대입하면서 답을 구할 수 있지만,최악일 경우는 시간초과가 나게 된다. 즉 모든 경우를 대입하는 방식은 이 문제에서는 틀리다! 큰 범위에서 해당값을 하나를 구해야 한다, 이진탐색(Binary Search)을 통해서 해당값을 구할 수 있다. 가정을 해보자, 만약 1 ~ 7까지에서 6을 구해야 한다면 이진탐색은 이렇게 작동한다. 일단 이진탐색을 하기 위해선 최솟값, 중간값(mid), 최댓값을 구해야 한다.처음에는 중간값인 4를 탐색한다, 하지만 답인 "6"이..

[BOJ] 백준 14938 서강그라운드 (JAVA)
Algorithm/- Baekjoon2023. 12. 25. 01:27[BOJ] 백준 14938 서강그라운드 (JAVA)

📑 문제🌱  아이디어N 번 반복 다익스트라알고리즘과 플로이드 워셜 알고리즘 두 방법으로 풀 수 있다일단 나는 다익스트라 알고리즘을 사용해서 풀기로 했다 (그냥 빠를 것 같아서...) 사실 플로이드 워셜을 사용해도 시간초과는 걱정안 해도 된다 ㅎㅎ위 문제에서 "탐색 범위"를 입력으로 주는데, 예를 들어 탐색 범위가 5 일 때 현재 노드로부터 다른 노드까지의 거리가5보다 작거나 같아야 한다. 즉 현재 노드에서 모든 노드의 최단거리를 구하고, 탐색범위 이하의 노드들의 아이템을 도출한다! 🌱 코드 및 풀이그래프가 가지는 모든 정점을 기준으로 각각 시작노드로 설정 후 모든 정점을 기준으로 최단거리를 탐색하고탐색범위에 비례한 아이템을 챙길 수 있는 최대 숫자를 출력한다. 즉 현재 노드에 아이템이 몇 개가 있는..

[BOJ] 백준 18111 마인크래프트 (JAVA)
Algorithm/- Baekjoon2023. 12. 21. 03:26[BOJ] 백준 18111 마인크래프트 (JAVA)

📑 문제🌱 아이디어이 문제는 한 블록당 숫자를 기준으로 푸는 것이 아닌 평탄화 기준이 될 땅 높이를 기준으로 탐색한다! 처음엔 문제에서 말한 조건 1,2번을 DFS로 풀어서 한 블록을 기준으로 평탄화 작업을 하려고 했는데...안된다는 것을 빨리 깨달았다... 이 문제는 "땅의 높이는 256블럭 보다 작거나 같은 자연수 또는 0 이다"  라는 말을 이용해서 풀어야 한다 예를 들어 결국 평탄화 작업을 통해 나오는 땅의 높이는 0 ~ 256까지의 경우가 있다.즉 우리는 0~256까지 경우의 평탄화 기준 땅높이를 토대로 조건 1,2번과 인벤토리를 통해 평탄화할 수 있는지판단하고 평탄화 가능 하다면 최소 시간을 구해야 한다! 주석을 통해 코드마다 설명을 남겨놨으니 천천히 보면 이해하는데 어렵지 않을 것이다.?..

[BOJ] 백준 1309 동물원 (JAVA)
Algorithm/- Baekjoon2023. 12. 18. 12:00[BOJ] 백준 1309 동물원 (JAVA)

📑  문제🌱 아이디어사자는 마주 보게 배치하면 안 되며, 한 마리도 존재하지 않는 경우도 하나의 경우의 수로 센다 동적계획법(DP)을 사용하면 시간도 아끼면서 풀 수 있다!사실 본인도 점화식 세우는 법을 잘 모른다... 하지만 감이 안 잡히면 N의 수만큼 경우의 수의 수열을 만들어 보자!일단 문제처럼  N*2 배열을 만들어보자! (문제 조건에 성립하는 경우의 수)N = 0 -> 1 N = 1 ->  3N = 2 -> 7N = 3 -> 17N = 4 -> 41 이렇게 증가되는 수열이 만들어진다 이것을 점화식으로 세운다면점화식 = fn = f(n-1)*2 + f(n-2) 이렇게 세울 수 있다. 즉 전값*2 + 전전값 이 현재값이다 이용해서 구현해 보자!🌱  코드 및 풀이점화식을 세우고 DP 통해 구현한..

image