철학하는 개발자

있는 것은 있고, 없는 것은 없다.

Brute-Force 26

[백준 10157] 자리배정 [Java]

문제http://boj.ma/10157 10157번: 자리배정 boj.ma 풀이문제 요약주어진 배열의 (1, 1)에서 K번 만큼 달팽이 배열을 만들었을 때 마지막 위치를 출력하자.아이디어달팽이 배열의 진행 방향을 미리 정해두고, 배열 범위를 벗어났거나 이미 방문한 적 있다면 진행 방향을 변환해주면 된다. 만약 R*C가 K보다 작다면 K번째 달팽이 배열을 만들 수 없다. 0을 출력하면 된다.private static int[] solve(int K) { if (K > R*C) { return null; } int[][] board = new int[R][C]; int[] dx = {1, 0, -1, 0}; int[] dy =..

[백준 33690] 포린드롬 [Java]

문제http://boj.ma/33690 33690번: 포린드롬 boj.ma 풀이문제 요약음이 아닌 정수 P 이하의 수 중 i자리와 i - 1자리의 수가 항상 팰린드롬인 수의 전체 갯수를 구하자.아이디어i, i - 1자리의 수가 항상 팰린드롬인 수는 모든 자릿수가 동일한 수로 구성된 경우만 가능하다.N 이하이면서 모든 자릿수가 동일한 수를 전부 찾아주자. // Solve int cnt = 1; for (int i = 1; i 풀이 시간3분소스코드https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/practice/33690.java problem-solving/baekjoon-onlin..

[백준 09335] 소셜 광고 [Java]

문제9335번: 소셜 광고 9335번: 소셜 광고 boj.ma 풀이문제 요약최소한의 사용자에게만 광고를 게시해, 전체 사용자들이 광고를 모두 볼 수 있도록 하자.아이디어N개의 줄에 걸쳐 i번째 사용자의 친구 d명의 번호가 주어진다.이중에서 최소한의 사용자를 선택해 전체 N명에게 광고를 게시해야 한다.사용자와 친구를 비트마스킹으로 표현하자. for (int i = 0; i 광고를 게시할 임의의 사용자(select)를 선택하고, 선택된 사용자의 친구들을 모두 합쳤을 때, N명 모두에게 광고를 게시할 수 있는지 확인하자.광고를 게시할 임의의 사용자가 최소가 되도록 결과를 갱신하면 된다. int res = N; for (int select = 1; se..

[백준 02615] 오목 [Java]

문제2615번: 오목 2615번: 오목 boj.ma 풀이문제 요약19 * 19 크기의 바둑판에 존재하는 오목의 가장 왼쪽 위 바둑알의 좌표와 색상을 출력하자.아이디어오목의 가장 왼쪽 위 바둑알의 좌표를 구해야 한다. 따라서, 좌상단부터 우하단으로 이동하며 현재 위치로부터 우상(↗), 우(→), 우하(↘), 하(↓) 방향으로 오목이 있는지 검사하면 된다. private static int whoWin(int x, int y) { final int start = board[x][y]; int[][] dirs = { {-1, 1}, // ↗ {0, 1}, // → {1, 1}, // ↘ ..

[백준 28447] 마라탕 재료 고르기 [Java]

문제28447번: 마라탕 재료 고르기 28447번: 마라탕 재료 고르기 boj.ma 풀이N개 중 K개의 재료를 고르고, K개의 재료들에 대한 맛 궁합을 합한 최댓값을 구하는 문제다.우선 N개중 K개를 고르는 조합combination을 만들자 private static void combination(int idx, int depth) { if (depth == K) { res = Math.max(res, subCombination(0, 0, new int[2])); return; } for (int i = idx; i 이제 K개중 2개를 고르는 조합 subCombination을 구현하자. 2개를 골랐다면, 재료의 궁합을 다 ..

[백준 28238] 정보 선생님의 야망 [Java]

문제https://www.acmicpc.net/problem/28238 풀이주어진 N명의 학생들의 시간표를 보고 가장 많은 학생들이 두 번의 수업에 참여할 수 있는 날과, 참여할 수 있는 인원을 구하는 문제다.학생의 수와 요일의 곱이므로 모든 경우를 다 생각해볼 수 있다.모든 경우에 대한 합을 구하고, 합이 갱신될 때 마다 두 요일을 기록해두면 된다. // Solve int a = -1, b = -1; int max = -1; for (int i = 0; i max) { a = i; b = j; max = cnt; } ..

[백준 15658] 연산자 끼워넣기 (2) [Java]

문제https://www.acmicpc.net/problem/15658 풀이배열 A에 대해 주어진 연산자를 활용해 만들어지는 모든 식의 결과 중 최대/최소값을 구하는 문제다.중간값과, 다음에 계산할 요소의 인덱스를 넘겨주는 방식으로 풀이했다.만약 인덱스가 A의 길이와 같다면 더 이상 연산할 요소가 없기 때문에 연산을 중단하고 결과를 갱신했다. private static void bt(int temp, int nextIdx) { if (nextIdx == A.length) { max = Math.max(max, temp); min = Math.min(min, temp); return; }아직 연산할 요소가 남아있는 경..

[백준 01639] 행운의 티켓 [Java]

문제https://www.acmicpc.net/problem/1639풀이주어진 문자열 S에 대해 2N자리의 부분 문자열의 각 자리를 더했을 때 왼쪽과 오른쪽 N자리의 합이 동일한 부분 문자열의 최대 길이를 구하는 문제다.우선 S의 길이에 따라 가능한 최대 크기를 정해주자.홀수면 1을 빼고, 짝수면 원래 크기 그대로 최대 크기가 될 수 있다. // Solve int GAP = nums.length % 2 == 0 ? nums.length : nums.length - 1;길이가 홀수인 정답은 없으므로 GAP이 0이 될 때 까지 2씩 감소시키며 문제의 조건을 만족시키는 부분 문자열을 찾으면 된다. while (GAP > 0) { for (int i = ..

[백준 25594] HG 음성기호 [Java]

문제https://www.acmicpc.net/problem/25594 풀이문자열 S가 사전에 주어진 매핑표의 문자열들로 구성되어있는지 확인하는 문제다.직관적인 매핑을 위해 Map으로 매핑 테이블을 만들었다.단순히 문자열 배열로 만든 후 아스키코드값을 인덱스처럼 활용하는 방법도 있다. // Solve Map map = new HashMap(); map.put('a', "aespa"); map.put('b', "baekjoon"); map.put('c', "cau"); map.put('d', "debug"); map.put('e', "edge"); map.put('f', "firefox"); m..

[백준 05568] 카드 놓기 [Java]

문제https://www.acmicpc.net/problem/5568 풀이N개의 카드 중 K개를 골라서 만들어지는 숫자의 종류를 세는 문제다.고르는 순서에 따라 숫자가 달라지기 때문에 순열을 사용했다. for (int i = 0; i 만약 K개를 모두 골랐다면, 하나의 문자열로 합치고 집합에 추가하면 된다. private static void permutations(List permutation) { if (permutation.size() == K) { StringBuilder sb = new StringBuilder(); for (String num : permutation) { sb.append(num)..