본문 바로가기

구현218

[백준] 23252번 - 블록 [Java] https://www.acmicpc.net/problem/23252 1.  아이디어 2 x 1 타일은 2개가 모이면 되므로 짝수개인지 홀수개인지가 중요하다.ㄴ자 타일은 항상 1 x 1 타일보다 적어야하고 1 x 1 타일은 ㄴ자 타일과 매핑시킨 후 짝수개만큼 남아있어야 한다.2. 문제풀이 2 x 1 타일이 짝수개면 1 x 1 타일이 ㄴ자 타일보다 짝수개 많거나 같아야 한다.2 x 1 타일이 홀수개면 1 x 1 타일이 ㄴ자 타일보다 짝수개 많거나 같아야 하는데 이때 0개면 안된다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { .. 2025. 3. 10.
[프로그래머스] 176962번 - 과제 진행하기 [Java] https://school.programmers.co.kr/learn/courses/30/lessons/176962 문제 설명 과제를 받은 루는 다음과 같은 순서대로 과제를 하려고 계획을 세웠습니다.과제는 시작하기로 한 시각이 되면 시작합니다.새로운 과제를 시작할 시각이 되었을 때, 기존에 진행 중이던 과제가 있다면 진행 중이던 과제를 멈추고 새로운 과제를 시작합니다.진행중이던 과제를 끝냈을 때, 잠시 멈춘 과제가 있다면, 멈춰둔 과제를 이어서 진행합니다.멈춰둔 과제가 여러 개일 경우, 가장 최근에 멈춘 과제부터 시작합니다.과제 계획을 담은 이차원 문자열 배열 plans가 매개변수로 주어질 때, 과제를 끝낸 순서대로 이름을 배열에 담아 return 하는 solution 함수를 완성해주세요. 제한사항3 ≤.. 2025. 3. 6.
[프로그래머스] 172927번 - 광물 캐기 [Java] https://school.programmers.co.kr/learn/courses/30/lessons/172927 문제 설명 마인은 곡괭이로 광산에서 광석을 캐려고 합니다. 마인은 다이아몬드 곡괭이, 철 곡괭이, 돌 곡괭이를 각각 0개에서 5개까지 가지고 있으며, 곡괭이로 광물을 캘 때는 피로도가 소모됩니다. 각 곡괭이로 광물을 캘 때의 피로도는 아래 표와 같습니다.  예를 들어, 철 곡괭이는 다이아몬드를 캘 때 피로도 5가 소모되며, 철과 돌을 캘때는 피로도가 1씩 소모됩니다. 각 곡괭이는 종류에 상관없이 광물 5개를 캔 후에는 더 이상 사용할 수 없습니다. 마인은 다음과 같은 규칙을 지키면서 최소한의 피로도로 광물을 캐려고 합니다.사용할 수 있는 곡괭이중 아무거나 하나를 선택해 광물을 캡니다.한 번.. 2025. 3. 4.
[백준] 32951번 - AI 선도대학 [Java] https://www.acmicpc.net/problem/32951 1.  아이디어 주어진 연도에서 2024년을 빼면 몇 년이 지났는지 간단하게 알 수 있다.2. 문제풀이 아이디어 그대로 구현했다.3. 코드 import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); System.out.println(N - 2024); }}4. 후기 2025. 3. 3.
[백준] 23290번 - 마법사 상어와 복제 [Java] https://www.acmicpc.net/problem/23290 1.  아이디어 마법 연습의 각 작업을 메서드로 분리하고 조립해서 로직을 구현하는 방식으로 접근했다.2. 문제풀이 물고기는 위치와 방향을 담은 객체로 관리하며 Queue로 다뤘다.각 위치의 물고기 수를 저장하기 위한 카운팅 맵과 각 위치에서 냄새의 남은 시간을 저장하기 위한 카운팅 맵을 활용했다.작업 1은 작업 5에서 복제를 하기 위해 현재 물고기 정보를 따로 보관해야한다.작업 2는 물고기의 이동으로 델타배열을 통해 회전을 구현하고 상어 위치와 냄새 위치를 기록해서 구현하면 된다.작업 3은 상어의 이동으로 DFS 알고리즘을 통한 완전 탐색으로 진행했고 방문 체크 및 방문 해제로 물고기를 중복으로 제외하지 않게 주의하면서 탐색했고 가장 많.. 2025. 2. 24.
[백준] 21611번 - 마법사 상어와 블리자드 [Java] https://www.acmicpc.net/problem/21611 1.  아이디어 달팽이 배열을 활용한 다양한 연산을 하는 문제로 구슬을 파괴 후 재배치 -> 구슬의 폭발과 재배치 반복 -> 구슬의 변화 순서가 반복된다.각 단계를 수행하는 메서드를 작성해서 조합하는 방식으로 해결했고 달팽이 배열의 이동을 처리하기 위해 Queue와 Deque, 델타 배열을 활용했다.2. 문제풀이 달팽이 배열의 회전 방향에 맞춰 반시계 방향으로 델타 배열을 만들었고 입력의 d를 이 델타 배열에 맞추기 위한 배열도 선언했다. 이후 각 마법에 대해 destroy 메서드를 호출했는데 해당 메서드에서 마법의 한 사이클을 전부 수행했다. 먼저 구슬을 파괴한 후 재배치를 해야하는데 이때 달팽이 배열의 순회로 구슬을 Queue에 담고.. 2025. 2. 23.
[백준] 20058번 - 마법사 상어와 파이어스톰 [Java] https://www.acmicpc.net/problem/20058 1.  아이디어 2차원 배열의 회전, 얼음의 양 줄이기, 가장 큰 얼음 덩어리의 크기를 각각 구현해서 합치면 되는 문제로 2차원 배열의 회전읜 격자의 크기와 동일한 크기의 배열과 인덱스의 활용으로, 얼음 양 줄이기는 Queue를 활용해서, 가장 큰 얼음 덩어리의 크기는 BFS, DFS 알고리즘으로 구할 수 있다.2. 문제풀이 얼음판의 크기는 2^N으로 주어지는데 편의를 위해 N을 2^N으로 바꿔서 이용했다. 이를 위해 비트 연산자를 활용했다. 격자의 크기 역시 비트 연산으로 L을 2^L로 바뀌줬고 이후 회전 메서드에서 이용했다. 회전은 두 2차원 배열의 크기가 다른 점만 주의해서 구현하면 된다. 얼음의 양 줄이기는 사방탐색으로 줄여야 하.. 2025. 2. 23.
[백준] 17779번 - 게리맨더링 2 [Java] https://www.acmicpc.net/problem/17779 1.  아이디어 경계선을 표시하고 각 선거구의 영역에 대해 경계선에 닿기 전까지 탐색하는 방식을 활용했다.2. 문제풀이 먼저 기준점의 좌표와 d1, d2의 길이 모든 경우에 대해 탐색하는 브루트포스 알고리즘으로 접근했고 이를 위해 4중 for문으로 모든 케이스르 탐색했다. 기준점의 좌표와 d1, d2를 결정하면 해당 정보로 그림의 파란 경계선에 숫자 5를 넣은 방문 체크 배열을 만들었고 이를 활용해 탐색 경계를 구분했다. 탐색은 1번 영역은 정방향 순회, 2번 영역은 90도 돌린 정방향 순회, 4번 영역은 180도 돌린 정방향 순회, 3번 영역은 270도 돌린 정방향 순회로 탐색을 했고 탐색 과정에서 경계를 만나면 해당 안쪽 for문은 .. 2025. 2. 21.
[프로그래머스] 150365번 - 미로 탈출 명령어 [Java] https://school.programmers.co.kr/learn/courses/30/lessons/150365 문제 설명 n x m 격자 미로가 주어집니다. 당신은 미로의 (x, y)에서 출발해 (r, c)로 이동해서 탈출해야 합니다.단, 미로를 탈출하는 조건이 세 가지 있습니다.격자의 바깥으로는 나갈 수 없습니다.(x, y)에서 (r, c)까지 이동하는 거리가 총 k여야 합니다. 이때, (x, y)와 (r, c)격자를 포함해, 같은 격자를 두 번 이상 방문해도 됩니다.미로에서 탈출한 경로를 문자열로 나타냈을 때, 문자열이 사전 순으로 가장 빠른 경로로 탈출해야 합니다.이동 경로는 다음과 같이 문자열로 바꿀 수 있습니다.l: 왼쪽으로 한 칸 이동r: 오른쪽으로 한 칸 이동u: 위쪽으로 한 칸 이동d.. 2025. 2. 19.
[백준] 21610번 - 마법사 상어와 비바라기 [Java] https://www.acmicpc.net/problem/21610 1.  아이디어 1번 행, 열과 N번 행, 열이 연결된 것에 대한 처리만 잘 해주면 되는 구현 문제로 모듈러 연산으로 환형 연결 처리를 하고 구름은 Queue를 활용해서 처리하는 방식으로 해결했다.2. 문제풀이 구름의 이동 거리인 s가 최대 50이어서 환형 연결은 50 * N을 더하고 N으로 나눈 나머지를 사용하는 방식으로 구현했다.구름은 Queue를 활용했고 Queue의 크기만큼 연산하는 상황이 많아 len 변수로 처리해주는 것만 신경썼다.move 메서드는 이전에 저장한 구름 위치정보를 바탕으로 구름을 이동시킨 후 비를 1 내리고, 대각선 방향에 대한 탐색으로 물복사버그 진행 후 새롭게 다음 구름 위치를 탐색하는 순서로 구현했다.3. .. 2025. 2. 19.
[백준] 31610번 - 飴の袋詰め (Drops Packing) [Java] https://www.acmicpc.net/problem/31610 1.  아이디어 A * B + C의 값을 구하는 문제로 사칙연산 연산자로 간단하게 해결할 수 있다.2. 문제풀이 System.out.println 메서드로 출력하는 방식으로 구현했다.3. 코드 import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int A = Integer.parseInt(br.readLine()); int B = Integer... 2025. 2. 19.
[백준] 8979번 - 올림픽 [Java] https://www.acmicpc.net/problem/8979 1.  아이디어 람다식을 활용한 객체 정렬로 해결할 수 있었다.2. 문제풀이 각 국가를 클래스로 만들고 국가 번호, 국가 순위, 금메달 수, 은메달 수, 동메달 수를 필드로 뒀다. 입력을 받은 후 금은동에 맞춰 정렬을 하고 순회를 하며 인덱스로 순위를 부여했다. 이후 국가 번호 순으로 정렬해서 K 국가의 순위를 출력하면 됐다.3. 코드 import java.io.*;import java.util.*;public class Main { private static class Node { int num; int order; int gold; int silver; int bron.. 2025. 2. 18.