본문 바로가기

분류 전체보기

(215)
백준 11286 절댓값 힙 (Java) 1. 문제 링크 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 절댓값 힙이라는 문제 이름에서 알 수 있듯이 PriorityQueue를 이용했다. 절댓값이기 때문에 익명클래스를 이용해 Comparator로 비교하는 과정을 만들었다. 입력받은 값을 큐에 추가를 하는 과정에서 비교를 하게 된다. 기존 compare을 사용하는 방식을 유지하지만 절댓값이 같은 경우 작은 값이 우선순위가 되도록 했다. 4. 코드 import java.io.BufferedRe..
백준 23971 ZOAC 4 (Java) 1. 문제 링크 23971번: ZOAC 4 i행 j열 자리를 (i, j)라고 할 때, (1,1)에 참가자가 앉은 경우 다른 참가자는 (1,2), (2,1), (2,2) 자리를 제외한 나머지 자리에 앉을 수 있다. (2,2)의 경우는 (1,1)과 행 번호 및 열 번호의 차가 1보다 크 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 일단 1명이 앉고, N칸 띄우고 1명이 앉는 게 반복되면 최대 인원이 앉을 수 있다. 주어진 H에서 1명이 앉을 자리를 뺀 값에서, N칸 띄우고 1명이 앉았을 때의 값에 처음에 앉은 1명을 더하면 된다. W도 똑같이 해서 나온 값을 곱하면 강의실이 수용할 수 있는 최대 인원이 나온다. 4. 코드 import java.io.BufferedReader; imp..
백준 16935 배열 돌리기 3 (Java) 1. 문제 링크 16935번: 배열 돌리기 3 크기가 N×M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1번 연산은 배열을 상하 반전시키는 연산이다. 1 6 2 9 8 4 → 4 2 9 3 1 8 7 2 6 9 8 2 → 9 2 3 6 1 5 1 8 3 4 2 9 → www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 문제가 요구하는 연산이 6개나 되기 때문에 각각을 메서드로 구현했다. 기존 배열의 원소를 새로운 배열의 원소로 넣고 출력했다. 1, 2번 연산은 반전이기 때문에 원하는 위치는 배열 길이 - 지금 원소의 인덱스 -1을 하면된다. 1번 연산은 x좌표의 값을 원하는 위치에 넣어주면 된다. 2번 연산은 y좌표의 값을 원하는 위치에 넣어주면..
백준 16926 배열 돌리기 1 (Java) 1. 문제 링크 16926번: 배열 돌리기 1 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 입력을 다 받고 나서 어떻게 구현해야 할지 고민했다. 일단 방향을 바꾸면서 돌아야 하니까 방향벡터를 사용하기로 했다. 주어진 예제를 통해 회전은 N과 M 중 작은 숫자의 반만큼 돈다는 사실을 알 수 있다. 회전은 한 겹씩 하기 때문에 반복문을 0부터 시작해서 회전 횟수만큼 돌렸다. 돌리는 과정에서 시작과 끝을 따로..
백준 13458 시험 감독 (Java) 1. 문제 링크 13458번: 시험 감독 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000) www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 시험장마다 총감독이 한명씩은 있어야 한다는 점만 안다면 문제를 잘 풀 수 있다. 각 시험장의 학생 수에서 감독이 볼 수 있는 수를 뺀다. 그러고 남은 학생수에서 부감독이 볼 수 있는 만큼의 수로 나눴을 때 나머지가 있으면 부감독이 더 필요하다는 얘기다. 4. 코드 import java.io.BufferedReader; import java.io.IOE..
백준 1991 트리 순회 (Java) 1. 문제 링크 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 트리의 노드를 나타낼 노드 클래스를 만든다. 여기서 노드 클래스는 자기 알파벳 + 왼쪽 노드 + 오른쪽 노드로 구성되어 있다. 입력받기 전에 문제에 따라 알파벳 순으로 배열에 넣어둔다. (순차적으로 넣기 위해 char를 사용했다.) 입력을 받으면서 왼쪽 자식과 오른쪽 자식을 노드 클래스의 left와 right에 넣는다. 재귀를 이용해 각각 전위, 중위, 후위 순회를 하면 끝이다. 4. 코드 im..
백준 1158 요세푸스 문제 (Java) 1. 문제 링크 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 큐에 1부터 N까지의 수를 먼저 넣는다. 반복문에서 K보다 작은 경우에는 큐에서 빼서 다시 넣는다. 큐의 크기가 1이 되면 끝내면 된다. 4. 코드 package com.ssafy.daily06; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Queue; import java.util.Scanner; public class Main { private static StringBuilder sb = new Strin..
백준 10866 덱 (Java) 1. 문제 링크 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 2. 문제 및 입출력예제 3. 문제 풀이 ArrayDeque 자료구조를 이용해 구현했다. 4. 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayDeque; public class Main { public static void main(String[] args) throws Exception { BufferedReader ..