브루트포스 알고리즘22 [백준] 2468번 - 안전 영역 [Java] https://www.acmicpc.net/problem/2468 1. 아이디어 물의 높이를 점점 높이면서 BFS, DFS로 영역의 개수를 구하는 걸 반복하면 해결할 수 있다.2. 문제풀이 물의 높이를 height로 하는 for문에서 반복적으로 탐색하도록 구현했다. 높이를 높일 때마다 방문 체크 배열과 영역의 수를 새롭게 만들어서 탐색하는 과정을 주어진 영역의 최대 높이까지 반복하는 방식으로 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main_BFS { private static final int[] dr = {-1, 0, 1, 0}; private static final int[] dc = {0, 1, 0, -1}; p.. 2025. 2. 3. [백준] 1254번 - 팰린드롬 만들기 [Java] https://www.acmicpc.net/problem/1254 1. 아이디어 현재 문자열이 팰린드롬이 아니면 뒤에 * 문자를 추가해서 *인 부분을 제외하고 팰린드롬이 되는지 판단하는 방식으로 해결했다.2. 문제풀이 팰린드롬은 문자열의 양 끝부터 중간까지 계속 문자가 일치하는지 비교하는 방식으로 구할 수 있다. 이때 한쪽 끝 문자가 *이면 그냥 넘어가는 방식으로 구현해서 팰린드롬이 될 때까지 반복하도록 구현했다.3. 코드 import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStr.. 2025. 2. 1. [백준] 2003번 - 수들의 합 2 [Java] https://www.acmicpc.net/problem/2003 1. 아이디어 누적합과 브루트포스 알고리즘을 통한 방법과 투 포인터 알고리즘을 활용한 방법으로 해결할 수 있었다.2. 문제풀이 - 누적합 + 브루트포스 알고리즘주어진 문제가 수열에서 특정 구간의 합이 M이 되는 경우의 수를 구하는 문제이므로 누적합 배열을 미리 만든 후 2중 for문을 활용해 누적합 배열에서 두 원소의 차를 계산하는 방식으로 특정 구간의 합을 간단하게 구할 수 있다. - 투 포인터 알고리즘주어진 수열이 자연수로만 이루어진 수열이어서 두 개의 포인터를 앞쪽에서 출발시켜 두 포인터의 위치를 합을 구할 구간이라 생각하면 합을 줄이기 위해서는 왼쪽 포인터를, 합을 늘리기 위해서는 오른쪽 포인터를 오른쪽으로 이동시키는 것으로 볼 .. 2025. 1. 17. [백준] 2501번 - 약수 구하기 [Java] https://www.acmicpc.net/problem/2501 1. 아이디어 모듈러 연산으로 간단하게 약수 여부를 구할 수 있다.2. 문제풀이 1부터 N까지 반복문을 돌며 N을 인덱스로 나눈 나머지가 0이면 약수가 된다는 점을 활용해서 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.r.. 2025. 1. 17. [백준] 2851번 - 슈퍼 마리오 [Java] https://www.acmicpc.net/problem/2851 1. 아이디어 누적합을 활용한 브루트포스 알고리즘으로 해결할 수 있다.2. 문제풀이 슈퍼 마리오는 처음부터 중단하기 전까지 버섯을 집어야하므로 이를 누적합 배열로 구했다. 누적합을 구하면서 바로 브루트포스 알고리즘으로 정답 및 100과의 차이를 저장하는 ans, diff 변수를 활용해서 100과의 차이의 절댓값이 더 작으면 해당 수를 정답으로 하고 절댓값이 같으면 정답과 해당 수 중 더 큰 수를 저장하도록 구현했다.3. 코드 import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReade.. 2025. 1. 17. [백준] 1977번 - 완전제곱수 [Java] https://www.acmicpc.net/problem/1977 1. 아이디어 미리 완전제곱수를 구하고 M부터 N까지의 수가 완전제곱수인지 비교하는 방식으로 해결했다.2. 문제풀이 N이 최대 10000이므로 1부터 100까지 수의 완전제곱수를 미리 구해서 boolean 배열에 표시 후 반복문을 돌며 표시된 숫자인지 비교하는 방식으로 구현했다.3. 코드 import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int M = In.. 2025. 1. 16. [백준] 2798번 - 블랙잭 [Java] https://www.acmicpc.net/problem/2798 1. 아이디어 N이 최대 100이므로 3장을 뽑는 3중 for문을 활용한 브루트포스 알고리즘으로 해결할 수 있다.2. 문제풀이 카드를 입력받은 후 정렬을 해서 반복문 중간에 3장의 합이 M보다 커지면 반복문을 종료하도록 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st .. 2025. 1. 16. [백준] 12348번 - 분해합 2 [Java] https://www.acmicpc.net/problem/12348 1. 아이디어 이전 분해합 문제에서 N의 범위가 훨씬 커진 문제로 1부터 N까지 모든 수를 탐색하기엔 너무 많은 시간이 걸린다. 분해합은 해당 숫자와 각 자리수의 합이므로 역으로 해당 숫자의 길이를 통해 분해합을 구할 숫자의 범위를 줄이는 방식으로 해결할 수 있다. 길이 L인 숫자 N의 생성자는 N보다 작은 수여야 하며 길이도 최대 L이다. 각 자리수의 최대값은 9이므로 역으로 N의 생성자의 최소값은 N - 9 * L 부터 가능함을 알 수 있다.2. 문제풀이 이전 분해합 문제에서 타입들을 long으로 바꾸고 탐색 범위를 바꿔주는 방식으로 구현했다.3. 코드 import java.io.*;public class Main { publ.. 2025. 1. 14. [백준] 2231번 - 분해합 [Java] https://www.acmicpc.net/problem/2231 1. 아이디어 몫과 나머지 연산을 활용해서 각 자리수를 추출할 수 있다.2. 문제풀이 1부터 N까지 반복문을 돌며 분해합을 구해서 N과 동일한지 비교하는 방식으로 구현했다. 분해합은 해당 숫자와 각 자리수의 합인데 각 자리수의 합은 몫과 나머지 연산을 활용해서 간단하게 추출할 수 있다.3. 코드 import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N .. 2025. 1. 14. [백준] 2309번 - 일곱 난쟁이 [Java] https://www.acmicpc.net/problem/2309 1. 아이디어 2중 for문을 통한 브루트포스 알고리즘으로 가짜 난쟁이를 찾을 수 있다.2. 문제풀이 모든 난쟁이 후보의 키의 합을 구한 후 2명씩 확인해보며 가짜 난쟁이인지 판단하는 방식으로 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedW.. 2024. 12. 30. 이전 1 2 다음