철학하는 개발자

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

PS/Baekjoon Online Judge 711

[백준 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}, // ↘ ..

[백준 23293] 아주 서바이벌 [Java]

문제23293번: 아주 서바이벌 23293번: 아주 서바이벌 boj.ma 풀이문제 요약게임 로그를 분석해서 주어진 부정행위 조건과, 차단 조건에 해당되는 유저 명단을 출력하면 된다.이동 : 이동의 경우 확인할 조건이 없다. 그냥 이동하자획득 : 현재 위치에 관계없이 일단 아이템을 얻을 수 있다. 만약 위치가 다르다면 부정행위를 기록하자조합 : 가지고 있는 아이템의 수에 관계없이 일단 아이템을 조합할 수 있다. 만약 재료가 없는 경우 부정행위를 기록하자. 이때, 아이템의 수는 0보다 작아질 수 없음에 유의하자.공격 : 다른 지역 플레이어를 공격할 경우 부정 행위/차단 조건에 둘 다 해당된다. 하지만 차단된다 해서 이후 로그를 처리하지 않는 것은 아니다.부정 행위의 로그와, 차단 유저의 번호를 중복없이 오름..

[백준 15886] 내 선물을 받아줘 2 [Java]

문제http://boj.ma/15886 15886번: 내 선물을 받아줘 2 boj.ma 풀이문제 요약1 * N칸에 놓인 선물을 ‘구사과’가 가져갈 때, ‘구사과’를 어디에 놓든 항상 선물을 가져가도록 하기 위한 최소 선물 개수를 구하자.아이디어‘구사과’는 어디에 놓이든 지도를 벗어나는 경우가 없으며, ‘EW’인 지역에 위치하거나 이동하게 되면 고립된다. 따라서 1 * N 칸 중 ‘EW’인 칸의 수 만큼 선물을 놓아야 한다. int cnt = 0; for (int i = 1; i 풀이 시간5분소스코드https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/easy/15886.java problem-so..

[백준 30518] 짜고 치는 가위바위보 (Small) [Java]

문제30518번: 짜고 치는 가위바위보 (Small) 30518번: 짜고 치는 가위바위보 (Small) boj.ma 풀이문제 요약이전에 lighter가 이겼고, 현재 비기는 경우를 제외한 모든 부분 수열의 수를 구하는 문제다.아이디어부분 수열의 수를 구해야 하므로 C(N, 1) ~ C(N, N)의 모든 부분 수열 중 조건을 만족하는 경우를 찾아야 한다.조건을 만족하는 경우인지 판별해줄 judge와 private static int judge(char lighter, char smallant) { if (lighter == smallant) return 0; if ((lighter == 'R' && smallant == 'S') || (lighter..

[백준 20937] 떡국 [Java]

문제20937번: 떡국 20937번: 떡국 boj.ma 풀이문제 요약주어진 떡국 그릇 크기로 최소한의 떡국 그릇 탑을 만들자아이디어자기 자신보다 작은 그릇만 쌓을 수 있고, 만약 큰 그릇의 수가 작은 그릇의 수보다 부족하다면 결국 떡국 그릇 탑은 더 생긴다.즉 동일한 크기의 떡국 그릇 중 최대 갯수를 가지는 그릇의 수 만큼 떡국 그릇 탑을 만들어야 한다.정렬 후 동일한 크기의 그릇의 최대 갯수를 세자 // Solve Arrays.sort(A); int prev = A[A.length - 1]; int res = 1; int cnt = 1; for (int i = A.length - 2; i >= 0; i--) { ..

[백준 16969] 차량 번호판 2 [Java]

문제16969번: 차량 번호판 2 16969번: 차량 번호판 2 boj.ma 풀이현재와 이전 번호판 형식을 비교해 다른 경우라면 모든 경우를 다 사용할 수 있고, 같다면 동일한 경우는 사용할 수 없다.나누는 수가 1e9이지만, 계산 과정에서 int 범위를 초과한다. long으로 결과를 담자.char prev = '\\0'; long cnt = 1; for (char c : board) { if (c != prev) { cnt = (cnt * (c == 'd' ? 10 : 26)) % MOD; } else { cnt = (cnt * (c == 'd' ? 9 : 25)) % MOD; ..

[백준 11049] 행렬 곱셈 순서 [Java]

문제11049번: 행렬 곱셈 순서 11049번: 행렬 곱셈 순서 boj.ma 풀이문제 요약행렬 N개의 곱셈 순서를 적절히 정해, 곱셈 연산 수의 최소값을 구해야 한다.아이디어행렬 곱셈은 결합 순서에 따라 계산 비용이 달라진다.따라서, 각 구간 [L, R]을 적절히 나누는 위치 t를 찾아 최소 비용을 계산해야 한다.점화식은 다음과 같다.dp[L][R]: L ~ R 구간의 최소 곱셈 비용dp[L][R] = dp[L][t] + dp[t + 1][R] + (matrix[L][0] * matrix[t][1] * matrix[R][1])행렬이 1개 일 때행렬이 1개 일 때, 즉 L == R일 때는 연산을 하지 않으므로, dp[L][L] = 0이 된다. // Solve int[][] dp =..

[백준 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) { ..