https://www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 조합과 완전탐색을 사용하여 풀 수 있다. 핵심 궁수는 N+1위 치에 3명 배치할 수 있다. 1 턴에 1명을 맞출 수 있고, 다른 궁수도 같은 적을 맞 출 수 있다. 궁수의 위치를 바꾸어가며 그때마다 잡은 적의 수를 카운트해야 한다. 정답 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; ..
https://school.programmers.co.kr/learn/courses/30/lessons/150368 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 핵심 우리가 각각의 이모티콘을 10,20,30,40 퍼로 할인시킬 수 있다. 이때 구독자수를 최대로 하고, 이후에 가장 많은 돈을 벌게 하자. 이모티콘은 최대 7개이다. 즉 4^7가지의 경우의 수가 생기기 때문에 완전탐색을 사용하였다. 정답 코드 class Solution { static int[] discount = {10,20,30,40}; static int maxOfSubscribe; s..
https://school.programmers.co.kr/learn/courses/30/lessons/42839 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제는 문자열이 들어오고 그 문자열을 가지고 만들 수 있는 소수의 수를 찾는 것이다. 예를 들어 "17" 이 들어오면 만들 수 있는 수는 1, 7, 17, 71이 되고 소수는 7, 17, 71이므로 3개이다. 핵심 우선 완전탐색(bfs)을 사용하여 가능한 모든 경우를 찾는다. 이후 소수를 판별해야 하는데 에라스토테네스의 체를 사용하면 된다. 에라스토테네스의 체를 예전에도 설명한 적이 있는데, ..
완전 탐색 문제입니다. 핵심 우선 세로 길이가 4인 블록을 넣을 수 있는지를 확인해야 한다. 가능하다면, 블록을 넣고 그때의 점수를 찾고, 다시 블록을 지우는 것이 핵심이다. 정답 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int c = sc.nextInt(); //가로 int r = sc.nextInt(); //세로 //값넣기 int[][] arr = new int[r + 1][c + 1]; for (int i = 1; i
오늘은 완전 탐색 알고리즘에 대해 알아보자 완전탐색 알고리즘이란? 완전탐색은 간단히 가능한 모든 경우의 수를 다 체크해서 정답을 찾는 방법이다. 즉, 무식하게 가능한 거 다 해보겠다는 방법을 의미한다. 이 방법은 무식하게 한다는 의미로 "Brute Force"라고도 부른다. 직관적이어서 이해하기 쉽고 문제의 정확한 결과값을 얻어낼 수 있는 가장 확실하며 기초적인 방법이다. 영어로 brute는 "짐승 같은, 난폭한"이라는 뜻이고, brute-force는 "난폭한 힘, 폭력"이라는 뜻이다. 오래 걸리는 데다 자원이 엄청나게 들어서 얼핏 보면 무식하다고 생각할 수도 있겠지만, 항상 정확도 100%를 보장한다는 점에서 암호 해독법 중 가장 확실하고 무서운 방법이다. 이론적으로 가능한 모든 경우의 수를 다 검색해..
완전 탐색 관련 문제입니다. 핵심 문제에서 좌표로 주어진 자리를 우리는 배열을 이용해서 표현해야 한다. 즉 좌표를 x축으로 대칭시킨 모습이 배열과 같다. 정답 코드 import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int width = sc.nextInt(); // 공연장의 가로길이 int height = sc.nextInt(); // 공연장의 세로길이 int order = sc.nextInt(); // 대기순서 int x = 0, y = -1; boolean down = true, up = false, right = false, lef..
이번에 풀어볼 문제는 우리가 어릴 때 자주 해보았던 숫자 야구게임이다. 핵심 완전 탐색 문제답게 가능한 모든 수를 대입해보아야 한다. 즉 123~987까지 해당 조건(스트라이크, 볼의 카운트)에 맞다면, 참이 되는 수를 1 추가한다. 정답 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int [][] arr = new int[105][3]; int n = sc.nextInt(); for (int i=0;i
완전 탐색 알고리즘 문제입니다. 핵심 처음에 이 문제를 풀려고 한다면, 여러 가지 방법을 떠올릴 것이다. 개인적으로 쉬운 방법은 배열의 거리를 구하는 것이다. 정답 코드 import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int X = sc.nextInt(); int Y = sc.nextInt(); int R = sc.nextInt(); for (int i =1; i
완전 탐색 알고리즘 문제입니다. 핵심 문제가 어려워 보일 수 있으나, 단순한 문제이다. 0으로 된 배 열위에 값을 입력받고, 그 값이 몇 번 나왔는지 체크하는 것이다. 정답 코드 import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int[][] arr = new int[101][101]; int n = sc.nextInt(); for (int i=1;i
우선 완전 탐색 알고리즘이란 가능한 모든 경우를 탐색하는 것이다. 아래의 체스 문제를 생각해보면, 룩이 이동 가능한 경우를 모두 탐색해보면 된다. 이때 출력은 1이다. 핵심 이 문제를 풀 때, 어떤 것을 기준으로 할까에 따라 풀이가 살짝 달라진다. 룩을 기준으로 하여, 룩의 이동경로 중 킹이 있다면 1 없다면 0을 출력하면 된다. 정답 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[][] arr = new int[8][8]; int[] rookX = new int[2]; int[] rookY = new int[2]; i..