[백준] 1149번 - RGB거리 java
·
Algorithm/Baekjoon
https://www.acmicpc.net/problem/1149 난이도 : S1Tag : DP풀이 일자 : 2025-03-09문제 탐색하기N: RGB거리에 존재하는 모든 집의 개수 (2 N개의 줄: N번째 집을 빨강, 초록, 파랑으로 칠하는 비용 (1  조건1번 집의 색은 2번 집의 색과 같지 않아야 한다.N번 집의 색은 N-1번 집의 색과 같지 않아야 한다.i(2 ≤ i ≤ N-1) 번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.조건을 정리하면 모든 집의 색은 인접한 집과 색깔이 달라야 합니다.이 조건을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구하면 됩니다.가능한 시간복잡도0.5초이므로 시간 복잡도가 5000만 이하여야 합니다.브루트포스(완전탐색)로 풀 경우 O(3^n)이 걸리고..
[백준] 14430번 - 자원 캐기 java
·
Algorithm/Baekjoon
https://www.acmicpc.net/problem/14430 난이도 : S2Tag : DP풀이 일자 : 2025-03-08문제 탐색하기N: 탐사할 영역의 세로길이 (1 M: 탐사할 영역의 가로길이 (1 1: 자원0: 빈 땅 로봇은 왼쪽 위(1, 1)부터 오른쪽 아래(N, M)까지 자원을 채집이동 가능 방향: 오른쪽 또는 아래쪽즉, N*M의 땅에서 로봇이 이동하며 모을 수 있는 자원의 최대 개수를 구하면 됩니다.가능한 시간복잡도완전탐색:각 위치에서 왼쪽 또는 오른쪽으로 이동 가능하므로 대략 O(2^(N*M))입니다. 최대 시간복잡도를 생각하면 O(2^(300*300))이므로 탐색 불가능합니다. DP:각 위치에 왔을 때 최선의 값을 유지하며 이동시 시간복잡도가 O(N*M)입니다.N*M ≤ 90,000..
[백준] 9095번 - 1, 2, 3 더하기 java
·
Algorithm/Baekjoon
https://www.acmicpc.net/problem/9095 난이도 : S3Tag : DP풀이 일자 : 2025-03-07문제 탐색하기T : 테스트 케이스 수n : 1,2,3의 합으로 나타낼 수 (1  이 문제는 정수 n을 1, 2, 3의 합으로 나타내는 모든 경우의 수를 구하는 문제입니다. 즉, 주어진 숫자 n을 만들 수 있는 서로 다른 합의 방법을 찾는 것이 핵심입니다. 예를 들어, n = 4일 때 가능한 조합은 다음과 같습니다.1+1+1+11+1+21+2+12+1+12+21+33+1가능한 시간복잡도이 문제는 n 이를 일반화하여 n이 커질 때의 시간복잡도를 고려하면 완전 탐색O(3^n)은 비효율적입니다.예를 들어, n=20이면 경우의 수가 121415개이고,  O(3^20) ≈ 35억 번의 연산..
[백준] 10026번 - 적록색약 java
·
Algorithm/Baekjoon
https://www.acmicpc.net/problem/10026 난이도 : G5Tag : BFS/DFS풀이 일자 : 2025-03-06문제 탐색하기RRRBBGGBBBBBBRRBBRRRRRRRR N: 그리드의 한 변의 길이 (1 그리드의 각 칸은 R(빨강),G(초록),B(파랑)중 하나로 색칠되어 있다.적록색약인 사람은 빨간색과 초록색을 구분하지 못한다.위 그림을 예시로 들면 정상인은 4개의 구역을, 적록색약은 3개의 구역을 보게 된다.즉 이 문제는 탐색 알고리즘(DFS/BFS)을 사용하여 각 격자를 탐색 후 색깔별로 정상인이 보는 구역의 개수와 적록색약이 보는 구역의 개수를 계산하는 게 핵심입니다. 가능한 시간복잡도먼저 각 구역을 하나하나 탐색해야 하므로 최대 O(100*100) = O(10,000)의..
[백준] 27737번 - 버섯 농장 java
·
Algorithm/Baekjoon
https://www.acmicpc.net/problem/27737 난이도 : S1Tag : BFS/DFS풀이 일자 : 2025-03-05문제 탐색하기N: 정사각형 버섯농장 한 변의 나무판 길이 (1 M: 버섯 포자 개수 (0 K: 하나의 버섯포자가 자라게 할 수 있는 최대 버섯 수 (상, 하, 좌, 우) (1  0 : 버섯이 자랄 수 있는 칸1 : 버섯이 자랄 수 없는 칸 조건 :한 칸에 여러 개의 버섯 포자를 겹쳐 심을 수 있다.이때 자랄 수 있는 최대 버섯 수는 x * K농사가 가능한 조건 : 버섯 포자를 하나라도 사용해야 합니다.버섯이 자랄 수 있는 모든 칸에 버섯이 전부 자라야 합니다.즉, 버섯이 자랄 수 있는 땅을 모두 덮을 수 있는 최소 포자 개수를 구하고, 남은 포자의 개수를 출력하는 것이..
[백준] 4963번 - 섬의 개수 java
·
Algorithm/Baekjoon
https://www.acmicpc.net/problem/4963 난이도 : S2Tag : BFS/DFS풀이 일자 : 2025-03-04문제 탐색하기w: 지도의 너비 (1 h: 지도의 높이 (1 00: 종료  땅은 "1"바다는 "0" 이때 같은 섬의 기준은 "가로", "세로", "대각선"으로 연결되어 있어야 합니다.즉, 지도가 주어졌을 때 위 조건을 만족하는 서로 다른 모든 섬의 개수를 세는것이 문제의 핵심입니다.가능한 시간복잡도지도의 가로 세로 최대 높이가 50이므로 각 위치를 한 번씩은 무조건 탐색해야 합니다. 그 위치에 존재하는게 섬인지 바다인지 알아야 하니까요. 즉, 모든 위치를 방문해야 하므로 기본적으로 O(w × h)의 시간이 걸립니다.그리고 섬을 찾으면 DFS를 통해 연결된 모든 칸을 방문해..
[백준] 1326번 - 폴짝폴짝 java
·
Algorithm/Baekjoon
https://www.acmicpc.net/problem/1326난이도 : S2Tag : BFS/DFS풀이 일자 : 2025-03-03문제 탐색하기N : 징검다리의 개수N개의 수: 각 징검다리에 쓰여있는 값 (배수의 위치로만 점프)a : 출발하는 a번째 징검다리b : 도착하는 b번째 징검다리  각 징검다리에 쓰여 있는 수의 배수만큼 떨어져 있는 곳으로만 이동하여,a번 징검다리에서 출발하여 최소한의 점프 횟수로 b번 징검다리까지 가는 게 핵심입니다.N은 최대 10,000개고 a,b는 N보다 작거나 같습니다.또한, 징검다리에 쓰여있는 정수는 10,000보다 작거나 같은 자연수입니다.이때, a에서 b로 갈 수 없다면 -1을 출력합니다.가능한 시간복잡도개구리가 현재위치에서 징검다리마다 점프할 수 있는 모든 경우..
[백준] 2467번 - 용액 c++
·
Algorithm/Baekjoon
https://www.acmicpc.net/problem/2467 문제 설명산성 용액과 알칼리성 용액의 특성값이 정렬된 순서로 주어졌을 때, 이 중 두 개의 서로 다른 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들자. 조건N은 2 이상 100,000 이하의 정수이 수들은 모두 -1,000,000,000 이상 1,000,000,000 이하오름차 순으로 주어짐풀이 방법고민을 많이 했던 문제이다.만약 10만 크기의 배열을 선언 뒤 이중 for문으로 찾게 된다면 O(100000*100000) = O(10000000000)약 100억의 시간복잡도가 걸리기 때문에 매우 비효율적이다. (O(n*2)) 그러므로 투 포인터 방식을 사용하면 된다.liquid[100000]  left = 0right = n-1 로..