Implementation(114)
-
[백준 16567] 바이너리 왕국[Java]
문제http://boj.ma/16567 16567번: 바이너리 왕국 boj.ma 풀이문제 요약길이가 N인 타일을 깨끗하게 하기 위해, M번의 시련에서 flip 최소 횟수를 빠르게 구하자.아이디어N, M이 최대 1e6이므로 완전 탐색은 시간 초과가 발생한다. i번째 칸을 더럽히는 시련에 대해 flip의 최소 횟수를 빠르게 구해야 한다.한 번의 flip은 연속된 타일을 청소할 수 있으므로, i번째 칸을 더럽힐 때 양 옆이 더럽혀진 적 없다면 새로운 flip이 된다. 만약 한 칸이라도 더럽혀져 있다면 기존에 계산한 한 번의 flip으로 청소할 수 있다.주어진 타일이 더럽혀진 경우에도 미리 flip을 계산해야 한다. 현재 타일을 기준으로 이전 타일의 더럽혀진 유무에 따라 최소 flip 횟수를 증가시키자. ..
2025.08.29 -
[백준 08911] 거북이 [Java]
문제http://boj.ma/8911 8911번: 거북이 boj.ma 풀이문제 요약거북이가 이동한 영역을 감싸는 가장 작은 직사각형의 면적을 구하자.아이디어주어진 명령대로 거북이를 이동시켜 가장 큰/작은 x, y값을 기록한 후 두 차를 통해 최소 직사각형의 면적을 구할 수 있다. for (char command : commands) { switch (command) { case 'F': x += dx[dir]; y += dy[dir]; break; case 'B': ..
2025.08.28 -
[백준 10384] 팬그램 [Java]
문제http://boj.ma/10384 10384번: 팬그램 boj.ma 풀이문제 요약문자열에 모든 알파벳이 등장하는 최소 횟수를 구해 적절한 문구를 출력하자.아이디어알파벳에 대한 빈도를 모두 기록 후 최소 빈도를 찾으면 된다.import java.io.*;public class Main { private static final String[] MSG = { "Not a pangram\\n", "Pangram!\\n", "Double pangram!!\\n", "Triple pangram!!!\\n" }; public static void main(String[] args) throws Exception { . . . ..
2025.08.27 -
[백준 25185] 카드 뽑기 [Java]
문제http://boj.ma/25185 25185번: 카드 뽑기 boj.ma 풀이문제 요약주어진 4장의 카드가, 3가지 휴식 조건 중 하나라도 만족하는지 확인하는 문제아이디어주어진 휴식 조건을 만족하는 메서드(isStraight, isTripleOrMore, isTwoPairOrFour)를 작성해 휴일인지 판별하면 된다.문제 난이도에 비해 구현이 많은 편이다. /** * 1. 적힌 알파벳이 같으면서 숫자가 연속되는 세 장이 존재한다. * 연속한 세 숫자는 서로 다른 숫자여야 한다. */ private static boolean isStraight(String[] cards) { Map> map = new HashMap(); for (Strin..
2025.08.22 -
[백준 04446] ROT13 [Java]
문제http://boj.ma/4446 4446번: ROT13 boj.ma 풀이문제요약주어진 문장 중 알파벳에 대해 규칙대로 변환하자.아이디어주어진 규칙을 구현하면 된다. 대문자/소문자도 처리할 수 있어야 하며, 알파벳이 아니라면 변환없이 넘어가면 된다. if (!Character.isLetter(chr)) { sb.append(chr); continue; } boolean isUpper = Character.isUpperCase(chr); char lowerChr = Character.toLowerCase(chr); ..
2025.08.13 -
[백준 30679] 별 가두기 [Java]
문제http://boj.ma/30679 30679번: 별 가두기 boj.ma 풀이문제 요약첫 번째 열에서 오른쪽으로 진입했을 때, 격자 밖으로 별이 나오지 않고, 무한하게 이동할 수 있는지 판단해야 한다.아이디어별이 이동 중 이미 방문한 곳에 도착했다 하더라도, 무한하게 이동할 수 있는지는 보증할 수 없다. 이미 방문한 곳의 좌표와, 방문할 때의 진입 방향이 모두 같아야 무한하게 이동하고 있음을 판단할 수 있다. private static boolean dfs(int x, int y, int d, boolean[][][] visited) { if (isValid(x, y)) { if (!visited[x][y][d]) { visited[x]..
2025.08.12 -
[백준 09324] 진짜 메시지 [Java]
문제http://boj.ma/09324 9324번: 진짜 메시지 boj.ma 풀이문제 요약문자열에 각 문자가 세 번째 등장할 때 한 번 더 문자가 추가되야 하는 규칙을 준수하는지 확인하자.아이디어각 문자의 빈도를 세며 3번 째로 등장할 때 마다 다음 문자가 없거나, 있는데 다른 문자라면 규칙을 준수하지 않은 문자열이다. private static String solve(char[] S) { int[] alpha = new int[26]; for (int i = 0; i 풀이시간10분소스코드https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/easy/09324.java problem-solv..
2025.08.09 -
[백준 05587] 카드 캡터 상근이 [Java]
문제http://boj.ma/5587 5587번: 카드 캡터 상근이 boj.ma 풀이문제 요약상근이와 근상이가 번갈아가며 가지고 있는 가장 작으면서도, 상대방보다 큰 카드를 내며 모든 카드를 다 내는 게임을 시뮬레이션 해야 한다.아이디어카드들을 TreeSet에 담고, 차례에 관계없이 마지막으로 낸 카드를 기준으로 작은 카드를 내야 하는 것에 유의하며 구현하면 된다. // Solve int prevCard = -1; boolean sangTurn = true; while (!sang.isEmpty() && !geun.isEmpty()) { if (sangTurn) { Integer sangCurCard = sa..
2025.08.05 -
[백준 18242] 네모네모 시력검사 [Java]
문제http://boj.ma/18242 18242번: 네모네모 시력검사 boj.ma 풀이문제 요약직사각형 한 쪽 변의 색칠되지 않는 방향을 찾자.아이디어변의 길이가 홀수이므로, 직사각형을 이루는 문자의 수(cnt)에 대해 ((문자의 수 + 1 - 4) / 4) + 2는 직사각형의 한 변의 길이가 된다. 이를 통해 색칠되지 않은 위치를 특정해 검사하자. private static String solve(int i, int j, int d) { final int halfD = d / 2; if (board[i][j + halfD] != '#') { return "UP"; } else if (board[i + d - 1][j + halfD] != ..
2025.07.28 -
[백준 24544] 카카오뷰 큐레이팅 효용성 분석 [Java]
문제http://boj.ma/24544 24544번: 카카오뷰 큐레이팅 효용성 분석 boj.ma 풀이문제 요약N개의 콘텐츠 흥미도에 대해 전체의 합과 My뷰에 미등록된 콘텐츠의 합을 구하자.아이디어선형 탐색을 통해 전체합을 구하면서, My뷰 등록 여부에 따라 미등록된 콘텐츠 합만 조건부로 계산하면 된다. // Solve int total = 0, notRegistered = 0; for (int i = 0; i 풀이 시간3분소스코드https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/practice/24544.java problem-solving/baekjoon-online-judge..
2025.07.26