"꾸준하고 완벽한 한 걸음"

PS 753

[백준 04626] 가글 [Java]

문제4626번: 가글 4626번: 가글 boj.ma 풀이주어진 분자와 분모를 7진법으로 나타낼 때, B~E번째 자릿수를 출력하는 문제다.B, E가 0인 경우는 소수점 바로 오른쪽 수로, 정수 부분은 제거하자. N %= D;장제법에 따라, 분자에 10대신 7을 곱하고, 분모로 나누었을때의 몫을 자릿수로 취해야 한다.B~E번째 자릿수만 필요하므로, 0 ~ B - 1번째는 건너뛰자. for (int i = 0; i 풀이시간10분소스코드https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/easy/04626.java problem-solving/baekjoon-online-judge/eas..

[백준 08896] 가위 바위 보 [Java]

풀이8896번: 가위 바위 보 풀이N개의 로봇들이 가위바위보를 했을 때, 승리한 로봇의 번호를 출력하는 문제다.난이도에 비해 구현 사항이 많다. 순서대로 구현해보자.게임 시작 전 어떤 로봇들이 살아있는지 체크할 배열 isAlive를 선언 및 초기화 했다. // Solve boolean[] isAlive = new boolean[N]; Arrays.fill(isAlive, true);K는 한 로봇이 한 게임 동안 내는 경우와 같다.N개의 로봇들이 각 라운드 별로 어떤 수를 냈는지 enable 배열로 확인해보자. private static int[] getEnableCheckArr(boolean[] isAlive, int K) { ..

[백준 11811] 데스스타 [Java]

문제11811번: 데스스타 11811번: 데스스타 boj.ma 풀이i번째와 j번째 요소의 AND 연산 결과가 저장된 행렬의 대각선 행렬을 구하는 문제다.임의의 A(i)를 구하기 위해서는 A(j)를 제외한 i 행의 AND 연산 결과를 만족하는 M(i, j)를 구해야 한다.최소한의 조건을 만족하는 M(i, j)는 여러 개가 존재할 수 있으며 이 중 아무거나 출력하면 된다.따라서 최소한의 조건을 만족하는 M(i, j)를 구하기 위해 i행의 모든 연산 결과에 대해 OR을 적용했다. // Solve for (int i = 0; i 모든 연산 결과에 OR 연산을 한 M(i, j)는 어떤 A(j)와 AND 연산을 하더라도 올바른 결과를 얻을 수 있다.풀이 시간5분소스코드https://github.c..

[백준 01270] 전쟁 - 땅따먹기 [Java]

문제1270번: 전쟁 - 땅따먹기 1270번: 전쟁 - 땅따먹기 boj.ma 풀이병사들의 번호가 주어질 때, 과반수를 넘는 병사가 존재하는지 검사하는 문제다.Boyer-Moore Voting으로 과반수가 넘는 병사를 빠르게 찾는 방법으로 풀이했다.병사의 번호가 int 범위보다 크므로 long을 사용하자. long candidate = -1, virtualCnt = 0; for (int i = 0; i 가상의 병사 번호 빈도가 실제로 절반을 초과하는지 검사 후 병사의 번호 또는 “SYJKGW”을 출력하자. long actualCnt = 0; for (long a : A) { if (a == candi..

[백준 02225] 합분해 [Java]

문제2225번: 합분해 2225번: 합분해 boj.ma 풀이정수 K개의 합이 N이 되도록 만드는 경우의 수를 세는 문제다.덧셈의 순서가 바뀐 경우는 다른 경우이지만, 동일한 수에 대한 연산은 하나의 경우로 볼 수 있다.ex) 1+2, 1+2는 다른 경우, 1+1, 1+1은 피연산자의 순서는 다르지만, 덧셈의 순서(?)는 다르다.dp[N][K] : 정수 K로 N을 만드는 경우의 수초기값부터 설정하자.dp[0][K]인 경우 0만 가능하다. for (int k = 1; k dp[N][1]은 N자신만 가능하다. for (int i = 1; i dp[N][K]는 dp[N - 1][K]의 맨 뒤 요소를 1늘리는 경우와dp[N][K-1]에 0을 추가해주는 경우로 볼 수 있다. f..

[백준 21965] 드높은 남산 위에 우뚝 선 [Java]

문제21965번: 드높은 남산 위에 우뚝 선 21965번: 드높은 남산 위에 우뚝 선 boj.ma 풀이주어진 수열이 문제에서 요구하는 수열인지 판별하는 문제다.어떤 지점까지 증가하다 감소하는 형태인지 판별하기 위해서 다음과 같이 분기를 정할 수 있다.현재와 이전 값이 같거나, 감소하는 추세에서 현재 값이 이전 값보다 증가하는 경우증가하는 추세에서 현재 값이 이전 값보다 감소하는 경우두 분기에 따라 결과를 결정하거나, 증가/감소 형태를 결정하면 된다 // Solve boolean isASC = true; String res = "YES"; for (int i = 1; i A[i - 1]) { res = "NO"; ..

[백준 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개를 골랐다면, 재료의 궁합을 다 ..

[백준 04900] 7 더하기 [Java]

문제4900번: 7 더하기 4900번: 7 더하기 boj.ma 풀이7세그먼트 코드를 10진수로 표현한 A, B가 주어졌을 때, A, B의 합 C를 다시 7세그먼트 코드로 표현하는 문제다.우선 7세그먼트 코드에 대응하는 10진수들을 매핑해주자. HashMap map = new HashMap(); map.put("063", "0"); map.put("0", "063"); map.put("010", "1"); map.put("1", "010"); map.put("093", "2"); map.put("2", "093"); map.put("079", "3"); map.put("3", "079"); ..

[백준 23351] 물 주기 [Java]

문제23351번: 물 주기 23351번: 물 주기 boj.ma 풀이첫 캣닢이 죽는 날짜를 최대한 미루도록 물을 주는 문제다.이를 위해서는 남은 수분이 적은 캣닢에게 물을 주는 것이 최선이다.따라서 오름차순으로 정렬 후 K개의 캣닢에게 B-1만큼 물을 주고, 물을 주지않은 나머지 캣닢들은 1씩 감소시키면 된다. Arrays.sort(arr); while (isValid(arr)) { for (int i = 0; i 이후에는 다시 수분이 적은 순대로 정렬 후 날짜를 늘려주자. Arrays.sort(arr); ++day; }풀이 시간5분소스코드https://github.com/rogi-rogi/problem-sol..

[백준 09253] 스페셜 저지 [Java]

문제9253번: 스페셜 저지 9253번: 스페셜 저지 boj.ma 풀이두 문자열 A, B에 C가 있는지 확인하는 문제로 특정 언어에서 쉬운 문제다.Java의 경우 11과 15로 제출 시 시간 초과가 발생한다.Java 8에서 String.contains로 쉽게 풀이할 수 있다.import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String A = br.readLine(); String B = br.readLine(..