분류 전체보기 188

[Algorithm] 타겟 넘버

코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr 풀이 주어진 정수형 배열을 더하거나 빼면서 index가 numbers의 길이에 도달했을 때, 연산 결과와 타겟을 비교한다. DFS로 풀었다. class Solution { public int cnt = 0; public void dfs(int[] numbers, int index, int now, int target) { if (index == numbers.length) { if (now == target)..

Algorithm 2021.06.25

[Algorithm] 병사 배치하기

문제 N명의 병사가 무작위로 나열되어 있다. 각 병사는 특정한 값의 전투력을 보유하고 있으며, 병사를 배치할 때는 전투력이 높은 병사가 앞쪽에 오도록 내림차순으로 배치하고자 한다. 또한 배치 과정에서 특정한 위치에 있는 병사를 열외시키는 방법을 이용한다. 그러면서도 남아 있는 병사의 수가 최대가 되도록 한다. 병사에 대한 정보가 주어졌을 때, 남아 있는 병사의 수가 최대가 되도록 하기 위해서 열외시켜야 하는 병사의 수를 출력하는 프로그램을 작성하시오. 풀이 문제에서는 전투력이 강한 순서대로 세웠지만 이를 반대로 약한 순서대로 세워도 문제 없다. 약한 순서대로 오름차순으로 봤을 때, 해당 문제는 최장 증가 부분 수열 문제로 볼 수 있다. [Algorithm] 최장 증가 부분 수열 (LIS) 최장 증가 부분..

Algorithm 2021.06.24

[Algorithm] 퇴사

문제 상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다. 오늘부터 N+1일 째 되는 날 퇴사를 하기 위해서 남은 N일 동안 최대한 많은 상담을 하려고 한다. 백준이는 비서에게 최대한 많은 상담을 잡아달라고 부탁했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡았다. 각각의 상담은 완료하는데 거리는 시간 T와 상담을 했을 때 받을 수 있는 금액 P로 이루어져 있다. 상담을 적절히 했을 때, 백준이가 얻을 수 있는 최대 수익을 구하는 프로그램을 구하시오. 풀이 1. 시간은 흐르기 때문에 앞에서부터 계산하기보다, 마지막 날부터 최고의 금액을 계산하면서 1일차로 오는 것이 좋다고 생각했다. 2. 1일부터 N일까지의 업무 중 X일 차에 수행할 업무가 걸리는 시간 Tx가 있을 때, X + Tx가 N일을 넘기..

Algorithm 2021.06.23

[Algorithm] 정수 삼각형

문제 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층부터 시작해서 아래에 있는 수 중 하나를 선택해 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하시오. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중 하나만 선택할 수 있다. 풀이 금광 문제와 마찬가지로 최대를 저장하는 2차원배열은 선언한다. 금광은 모든 2차원 배열을 탐색하면서 지나갔지만, 위 문제는 범위에 대한 조절만 잘 하면 된다. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int ..

Algorithm 2021.06.22

[Java Spring] Controller 구현 후 404 Error

Spring boot 프로젝트를 진행하다가 컨트롤러를 구현하고 이에 맞는 html 파일을 templates 경로에 생성했는데 404 Error가 발생함. (URL 확인, HTML 생성, Controller 확인) 해결 방법 1 이 때, application.properties 에 아래 코드를 추가하면 해결됨. spring.mustache.suffix=.html mustache를 템플릿 엔진으로 사용하는 프로젝트에서 위 설정을 해줘야 하는 듯 하다. 해결 방법 2 mustache는 기본적으로 .mustache 파일 확장자 명을 갖는다. 확장자를 html이 아닌 mustache로 설정해서 파일을 생성한다. 만약 itellij에 플러그인이 설치되어 있지 않으면 플러그인 설치. (아이콘이 수염달린 아이콘이어야 ..

Java/Spring 2021.06.21

[Algorithm] 금광

문제 n x m 크기의 금광이 있다. 금광은 1x1 크기의 칸으로 나누어져있고, 각 칸은 특정한 크기의 금이 들어있다. 채굴자는 첫번째 열부터 금을 캐기 시작한다. 맨 처음에는 첫번째 열의 어느 행에서든 출발할 수 있다. 이후 m번에 걸쳐서 매번 오른쪽 위, 오른쪽, 오른쪽 아래 중 하나의 위치로 이동해야 한다. 결과적으로 채굴자가 얻을 수 있는 금의 최대 크기를 출력하시오. 풀이 n x m 크기의 배열을 새로 생성한다. 해당 배열 (i, j)에서는 현재까지 가져갈 수 있는 최대의 금을 저장하도록 한다. 먼저, 0열의 값들을 초기화 한다. (각 자리의 값이 최대이기 때문) 그리고 1열부터는 직전 열의 왼쪽, 왼쪽 위, 왼쪽 아래의 값과 해당 칸의 합이 가장 큰 값을 저장하도록 한다. 마지막 m-1열에 저..

Algorithm 2021.06.21

[Algorithm] 공유기 설치

문제 도현이의 집 N개가 수직선 위에 있다. 각 집의 좌표는 같은 좌표를 가지지 않는다. 언제 어디서나 와이파이를 즐기기 위해 집에 공유기 C개를 설치하려고 한다. 최대한 많은 곳에서 와이파이를 사용하려고 하기 때문에, 한 집에는 공유기 하나만 설치할 수 있고, 가장 인접한 두 공유기 사이의 거리를 가능한 크게 설치하려고 한다. 공유기 C개를 N개의 집에 적당히 설치해서 가장 인접한 두 공유기 사이의 거리를 최대로 하는 프로그램 작성하시오. 풀이 해당 문제는 공유기가 설치되는 거리를 찾아야 한다. 1. 공유기 설치되는 집을 조합으로 뽑아 각각의 거리를 확인한다? 2. 공유기 설치되는 거리를 줄여나가면서 몇개가 설치되는지 확인한다? 1번보다는 2번을 알고리즘으로 푸는데 효율적으로 보인다. (조합하고, 연산..

Algorithm 2021.06.20
반응형