[BOJ] 백준 2667 단지번호붙이기 (JAVA)
Algorithm/- Baekjoon2024. 1. 3. 19:24[BOJ] 백준 2667 단지번호붙이기 (JAVA)

📑 문제 🌱 아이디어BFS(너비우선탐색) + 구역 카운팅 문제이다! ArrayList에 구역 범위를 담으면 된다. BFS 알고리즘 구현만 가능하다면 아주 쉽게 풀 수 있는 문제이다. 입력이 0, 1 단 두 개 이기 때문에 '1' 일 때만 인접해 있는 모든 '1' 을 탐색하고 범위를 카운팅해  ArrayList에 입력한다. 즉 ArrayList의 사이즈가 총 단지수이고, 저장된 요소를 오름차순으로 출력하면 된다! 아래 코드에 주석을 달아 놨으니 이해하는데 큰 어려움은 없을 것이다!🌱 코드 및 풀이기본적인 BFS 알고리즘이다. '1' 을 발견한다면 인접한 '1' 까지 전체 탐색하고 vi 배열을 통해 방문 처리를 해준다 ArrayList에 단지 수를 입력하고 ArrayList의 사이즈 = 총 단지수, A..

[BOJ] 백준 14499 주사위 굴리기 (JAVA)
Algorithm/- Baekjoon2024. 1. 3. 18:38[BOJ] 백준 14499 주사위 굴리기 (JAVA)

📑 문제🌱 아이디어주사위 전개도를 배열로 구현해서 각 자리마다 주사위 면을 할당해 준다!   주사위 굴리기 문제는 전개도를 친절히 제공해 준다. 필자는 전개도를 보고 더 헷갈렸었다. 2차원 배열로 구현을 해야 하나..가로, 세로 배열을 만들어야 하나... 사실 잘 못 접근했고, 배열 하나 만들고 해당 배열마다. 주사위 면(위, 바닥, 앞, 뒤. 왼, 오)의역할을 할당해서 문제를 접근하는 게 좋은 방법인 것 같다. 아래 코드에서 함수의 역할을 천천히 생각해 보면서 읽어본다면 이해하기 쉬울 것이다.🌱 코드 및 풀이dx, dy 배열을 통해 주사위의 움직임 (동, 서, 남, 북) 을 구현하고, 입력에 맞게 이동한다. // 위, 바닥, 앞, 뒤, 왼, 오 public static int[] dice =..

[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] 백준 16953 A->B (JAVA)
Algorithm/- Baekjoon2023. 12. 26. 22:23[BOJ] 백준 16953 A->B (JAVA)

📑 문제🌱 아이디어문제에서 여러 가지의 경로를 제공하면 재귀함수를 사용해서 풀 수 있다 전에 재귀함수를 공부하면서 가장 어려웠던 점이 재귀적 사고방식이었다, 이해하기도 전에 "여러 가지 선택지가 있으면 재귀함수도 고려해 보자"라는 생각을 박아 놨던 것 같다. 처음 노드에서 조건 1을 실행하고 조건 1-1에서 결과값이 B가 될 수 없다면 return 하고 전 노드로 되돌아가 조건 1-2를 선택하게 된다. 본문에서 "가능한 연산은 두 가지" 라고 제시했다. 즉 우리는 "2*A"를 선택할 때와 "A*10 +1"을 선택할 때를 재귀적으로 호출하면 된다!두 가지 경우를 만들어 놓는다면 나머지는 컴퓨터가 알아서 해줄 것이다. 🌱 코드 및 풀이sum = 10억 일 때 조건 2를 연산하면 정수형 범위를 벗어나게..

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

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

반응형
image