본문 바로가기

11

[백준] 21611번 - 마법사 상어와 블리자드 [Java] https://www.acmicpc.net/problem/21611 1.  아이디어 달팽이 배열을 활용한 다양한 연산을 하는 문제로 구슬을 파괴 후 재배치 -> 구슬의 폭발과 재배치 반복 -> 구슬의 변화 순서가 반복된다.각 단계를 수행하는 메서드를 작성해서 조합하는 방식으로 해결했고 달팽이 배열의 이동을 처리하기 위해 Queue와 Deque, 델타 배열을 활용했다.2. 문제풀이 달팽이 배열의 회전 방향에 맞춰 반시계 방향으로 델타 배열을 만들었고 입력의 d를 이 델타 배열에 맞추기 위한 배열도 선언했다. 이후 각 마법에 대해 destroy 메서드를 호출했는데 해당 메서드에서 마법의 한 사이클을 전부 수행했다. 먼저 구슬을 파괴한 후 재배치를 해야하는데 이때 달팽이 배열의 순회로 구슬을 Queue에 담고.. 2025. 2. 23.
[백준] 1966번 - 프린터 큐 [Java] https://www.acmicpc.net/problem/1966 1.  아이디어 문서 번호와 중요도를 저장한 클래스를 활용해서 해결했다.2. 문제풀이 주어진 문서로 객체를 만들어서 Queue에 넣은 후 무한 루프에서 Queue에 있는 문서의 중요도의 최댓값을 구한 후 Queue에서 문서 하나를 꺼내 이 문서의 중요도가 최댓값과 일치하면서 M번 문서면 종료하고 문서의 중요도가 최댓값보다 크거나 같으면 출력할 정답을 + 1 하고 다시 무한 루프를 반복하고 둘 다 아니면 다시 Queue에 삽입했다.3. 코드 import java.io.*;import java.util.*;public class Main { private static class Node { int order; i.. 2025. 2. 15.
[프로그래머스] 118667번 - 두 큐 합 같게 만들기 [Java] https://school.programmers.co.kr/learn/courses/30/lessons/118667 문제 설명길이가 같은 두 개의 큐가 주어집니다. 하나의 큐를 골라 원소를 추출(pop)하고, 추출된 원소를 다른 큐에 집어넣는(insert) 작업을 통해 각 큐의 원소 합이 같도록 만들려고 합니다. 이때 필요한 작업의 최소 횟수를 구하고자 합니다. 한 번의 pop과 한 번의 insert를 합쳐서 작업을 1회 수행한 것으로 간주합니다.큐는 먼저 집어넣은 원소가 먼저 나오는 구조입니다. 이 문제에서는 큐를 배열로 표현하며, 원소가 배열 앞쪽에 있을수록 먼저 집어넣은 원소임을 의미합니다. 즉, pop을 하면 배열의 첫 번째 원소가 추출되며, insert를 하면 배열의 끝에 원소가 추가됩니다. 예.. 2025. 2. 10.
[소프티어] 6251번 - 업무 처리 [Java] https://softeer.ai/practice/6251 1.  아이디어 각 직원에 대해 왼쪽 직원한테 받은 업무와 오른쪽 직원한테 받은 업무를 구분해야 한다. 이를 위해 두 개의 Queue를 갖는 노드 클래스를 활용했고 주어진 트리의 루트를 1로 설정한 후 비트마스킹을 활용했다. 업무의 전달은 부서장부터 말단 직원 순으로 진행된다는 점에 주의해야한다.2. 문제풀이 완전이진트리인데 말단 직원과 부서장까지의 올라가는 거리가 같으면 포화이진트리가 된다. 이를 통해 가장 왼쪽 말단 직원의 번호와 가장 오른쪽 말단 직원의 번호를 비트마스킹으로 구해서 변수로 저장했다. 이후 말단 직원에게 업무들을 부여했다. R일까지의 반복은 부서장 일처리 -> 중간 직원 일처리 -> 말단 직원 일처리 순서로 진행되며 역시 비트.. 2025. 2. 6.
[백준] 18258번 - 큐 2 [Java] https://www.acmicpc.net/problem/18258 1.  아이디어 기존 큐 문제에서 명령의 수만 늘어난 문제로 동일한 코드로 해결했다. 명령의 수가 제법 많아서 BufferedWriter를 사용하는 것을 추천한다.([코딩테스트 준비/백준] - [백준] 10845번 - 큐 [Java])2. 문제풀이 동일하게 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); .. 2025. 1. 12.
[백준] 10845번 - 큐 [Java] https://www.acmicpc.net/problem/10845 1.  아이디어 큐를 직접 구현하는 걸 권장하는 문제로 클래스를 작성해 직접 구현하는게 제일 좋지만 그냥 Deque와 ArrayDeque를 활용해서 구현했다.2. 문제풀이 Deque의 내장 메서드와 매칭되게 swith문을 활용해서 구현했다. Queue는 가장 뒤의 원소에 기본적으로 조회할 수 없어서 Deque로 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new Input.. 2025. 1. 12.
[백준] 11728번 - 배열 합치기 [Java] https://www.acmicpc.net/problem/11728 1.  아이디어 정렬된 배열 두 개를 합치는 경우 각 배열의 앞 원소들을 비교하며 추가하면 합쳐진 배열을 따로 정렬하지 않아도 정렬을 유지함을 이용했다.2. 문제풀이 각 배열의 앞 원소를 비교해서 작은 원소를 새로운 배열에 넣고 작았던 원소의 다음 위치을 비교할 원소로 바꿔주는 과정을 두 배열의 모든 원소를 확인할 때까지 반복하면 된다. 구체적 구현으로는 Queue와 투 포인터 알고리즘을 활용했고 Queue는 peek 값이 배열의 앞 원소가 되면서 Queue에서 원소를 제거하면 자동으로 다음 원소를 바라보게 되어 적합하다고 생각했고, 투 포인터 알고리즘은 배열을 그대로 둔 채 포인터의 이동으로 확인을 한다는 점에서 역시 적합하다고 판단했.. 2025. 1. 8.
[백준] 1158번 - 요세푸스 문제 [Java] https://www.acmicpc.net/problem/1158 1.  아이디어 큐 자료구조를 활용하면 원순열에서 특정 순서의 사람을 간단하게 제거할 수 있다.2. 문제풀이 enqueue 값에 dequeue값을 넣으면 계속 순열을 원형으로 돌 수 있는 점을 활용했다.모든 사람이 제거될 때까지 제거할 순번이 아닌 사람은 큐의 뒤에 넣고 제거할 사람은 따로 빼는 과정을 반복하면 로직을 구성할 수 있고 출력 양식을 맞추기 위해 StringBuilder를 활용했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { Buff.. 2024. 12. 12.
[백준] 11866번 - 요세푸스 문제 0 [Java] https://www.acmicpc.net/problem/11866 1.  아이디어 큐 자료구조를 활용하면 원순열에서 특정 순서의 사람을 간단하게 제거할 수 있다.2. 문제풀이 enqueue 값에 dequeue값을 넣으면 계속 순열을 원형으로 돌 수 있는 점을 활용했다.모든 사람이 제거될 때까지 제거할 순번이 아닌 사람은 큐의 뒤에 넣고 제거할 사람은 따로 빼는 과정을 반복하면 로직을 구성할 수 있고 출력 양식을 맞추기 위해 StringBuilder를 활용했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { Buf.. 2024. 12. 12.
[백준] 2164번 - 카드2 [Java] https://www.acmicpc.net/problem/2164 1.  아이디어 Queue 자료구조를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 카드 뭉치 맨 위를 큐의 front, 카드 뭉치 맨 아래를 큐의 rear로 생각하며 풀이하면 간단하게 구현할 수 있다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLi.. 2024. 12. 6.
[백준] 2161번 - 카드1 [Java] https://www.acmicpc.net/problem/2161 1.  아이디어 Queue 자료구조를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 카드 뭉치 맨 위를 큐의 front, 카드 뭉치 맨 아래를 큐의 rear로 생각하며 풀이하면 간단하게 구현할 수 있다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWr.. 2024. 12. 6.