코딩

문제 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. 새로 세울 수 있는 벽의 개수는 3개이며, 꼭 3개를 세워야 한다. 예를 들어, 아래와 같이 연구소가 생긴 경우를 살펴보자. 2 0 0 0 1 1 0 0 0 1 0 1 2 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 ..

문제 N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다. 예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄셈(-) 1개, 곱셈(×) 1개, 나눗셈(÷) 1개인 경우에는 총 60가지의 식을 만들 수 있다. 예를 들어, 아래와 같은 식을 만들 수 있다. 1+2+3-4×5÷6 1÷2+3+4-5×6 1+2÷3×4-5+6 1÷2×3-4+5+6 식의 계산은 연산자 우선..

문제 상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다. 오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다. 백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아놓았다. 각각의 상담은 상담을 완료하는 데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있다. N = 7인 경우에 다음과 같은 상담 일정표를 보자. 1일 2일 3일 4일 5일 6일 7일 Ti 3 5 1 1 2 4 2 Pi 10 20 10 20 15 40 200 1일에 잡혀있는 상담은 총 3일이 걸리며, 상담했을 때 받을 수 있는 금액은 10이다. 5일에 잡혀있는 상담은 총 2일이 걸리며, 받을 수 있는 금액은 1..

문제 접근 해당 문제는 총감독관이 감독하는 응시자를 제외하고 나머지 응시자 중에서 부감독관의 수로 나눴을 때 나머지 값에 따라 정답을 결정해주면 해결되는 문제이다. 그리고 최악의 케이스일 경우 정답이 int 범위를 벗어날 수 있으므로 long 타입을 써야한다. 코드 import java.io.*; import java.util.StringTokenizer; // https://www.acmicpc.net/problem/3190 public class Main { static StringBuilder sb = new StringBuilder(); static int N, B, C; static int[] testRooms; public static void main(String[] args) { input..

문제 접근 이 문제는 우선순위 큐와 같은 자료구조를 사용하여 특정 기준을 적용한 정렬을 구현해야 한다. 코드 import java.util.*; class Solution { public long[] solution(int[][] program) { long[] answer = new long[11]; int curTime = 0; int restRunningTime = 0; // 실행 중인 프로그램이 남은 시간 // 전체 프로그램 우선순위 큐 PriorityQueue programQueue = new PriorityQueue(); // 대기 중 우선순위 큐 PriorityQueue waitingQueue = new PriorityQueue(); for (int i=0; i 0) restRunningTi..

문제 접근 이 문제는 모든 케이스를 확인해서 결과를 도출해야하는 완전 탐색 문제이다. 테니스 탁구 수영 석환 40 10 10 영재 20 5 0 인용 30 30 30 정현 70 0 70 준모 100 100 100 재귀함수를 통해 DFS로 최대값을 비교해가며 마지막 케이스까지 검증 후 결과를 리턴한다. 코드 import java.lang.Math; class Solution { int maxValue = Integer.MIN_VALUE; int sum = 0; boolean[] visited; public int solution(int[][] ability) { visited = new boolean[ability.length]; process(ability, 0); return maxValue; } pri..

문제 접근 이 문제는 외톨이 알파벳을 찾는 기준을 생각하는 것이 핵심이다. 문자 배열을 순회하며 이전에 한번 나왔던 알파벳이 다른 알파벳 뒤에 한번 더 나올 때를 체크해서 외톨이 알파벳으로 등록해준다. 정리하자면 알파벳이 이전에 나온 적이 있다. 직전의 알파벳과 다른 알파벳이다. 외톨이 알파벳으로 등록된 적이 없는 알파벳이다. 이 3가지 요건을 충족하는 경우에 외톨이 알파벳 대상이 된다. 코드 import java.util.*; class Solution { public String solution(String input_string) { String[] inputArr = input_string.split(""); String prevAlp = inputArr[0]; // 외톨이 알파벳 검증 Set S..