일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- CMD
- 20055
- 별자리 만들기
- SpringBoot
- 알고리즘
- Java
- dockercompose
- Eclipse
- 이산수학
- EC2
- 21278
- Error
- Error fetching remote repo 'origin'
- 투에모스문자열
- 18222
- docker
- 14466
- 백준
- 2108_통계학
- 자바
- documentationpluginsbootstrapper
- 이클립스
- 프로그래머스
- 설정
- 호석이두마리치킨
- jenkins
- 날짜일수
- 소가길을건너간이유6
- 2167. 2차원 배열의 합
- to display the conditions report re-run your application with 'debug' enabled
- Today
- Total
목록알고리즘 (58)
계단을 오르듯이
yellow를 기준으로 일단 가로 세로의 길이를 구했다. 가로, 세로 모두 yellow를 기준으로 전체 가로, 세로길이는 2씩 커진다. 가로 세로를 구하기 위해서는 약수를 구하는 방식으로 1부터 루트N까지 연산을 통해 반복되지 않게 하였고, 가로의 길이가 항상 크므로 i가 세로가 되도록 하였다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class Solution { public int[] solution(int brown, int yellow) { int[] answer = new int[2]; for(int i=1;i
이 문제는 자료구조를 사용하지 않고 2중 for문을 사용해도 통과하는 문제이다. 시간복잡도 상 10,000 * 10,000 이라 빡빡하거나 안될 줄 알았는데 통과가 되는 것 같다. 스택의 자료구조를 사용하였다. 인덱스를 스택에 넣고, 해당 인덱스의 값이 스택의 top()보다 작으면 인덱스의 차로 계산을 하고, 현재 top의 계산이 끝나도 스택에 존재하는 모든 top과의 비교를 통해 주식의 하락세를 확인해야한다. 그리고 무조건 모든 인덱스는 스택에 한번씩은 들어가 다음 연산을 수행한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import java.util.*; class Solution { public int[] solution(int[] prices) ..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import java.util.*; class Solution { public int solution(int bridge_length, int weight, int[] truck_weights) { int answer = 0; int possibleWeight = weight; Queue q = new LinkedList(); for(int i=0;i= nowWeight && q.size()
문제를 이해하면 이렇다. 대기 목록에서 하나의 문서를 순서대로 빼어, 그 문서가 최고의 우선순위이면 그대로 프린트를 한다. 그 프린트의 위치가 일치하면 바로 끝. 그렇지 않으면 프린트하는 순서를 알아내기 위해 순서를 나타내는 변수를 올려준다. 만약 최고의 우선순위가 아닐 시 바로 뒤로 줄을 서야하고 그 외에는 변화할게 없다. for-each의 for문을 이용하여 큐에 존재하는 모든 원소와 우선순위를 비교할 수 있었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 import java.util.*; class Solution { public int ..
5원과 2원이 있기 때문에 거스름돈을 최소로 주기 위해 5원을 최대로 사용했다. 2원을 위해 5원을 최대로 사용할 경우 남은 거스름돈이 짝수가 되도록 하였으며, 나머지 거스름돈에서 2원으로 거스름돈을 주지 못할 경우는 2로 나누었을 때 나머지 값이 존재하는 상황이므로 -1을 출력하고, 그렇지 않은 경우는 거스름돈의 최소값을 출력한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package algo; import java.io.BufferedReader; import java.io.InputStreamReader; public class B_14916_거스름돈 { public static void main(String[] a..
플로이드-와샬 알고리즘을 이용해야한다. 플로이드 와샬 알고리즘은 O(n^3)의 시간복잡도를 가지며, 모든 정점의 이동거리를 구할 수 있다. 총 n개의 정점이 있다면 1개의 노드가 n-1의 노드까지의 연결 거리를 모두 알 수 있다. 우선 플로이드-와샬 알고리즘을 통해 서로의 연결 상태(간선의 개수)를 알 수 있고, 간선의 개수만큼의 시간이 걸린다. 현재 문제에서는 왕복의 거리이므로 간선의 수 한개당 2의 시간이 걸린다고 생각하고 시간 배열을 채웠다. 그 후, 치킨집을 조합으로 하여 모든 경우의 수를 통해 최소의 거리시간을 구하였다. 우선 2개의 치킨집을 조합으로 구한 후 모든 정점에서 2개의 치킨집 중 가장 가까운 치킨집을 구하여 그 시간을 모든 총 시간을 나타내는 시간에 더해주었고, 이렇게 모든 경우를 ..
길을 배열에 나타내는 것이 문제였다. 역시 어떻게 해야하나... 하면 언제나 풀이는 3차원 배열을 사용하는 것!!!! 길 역시 4개의 방향을 가지고 있기에 2차원으로 배열의 위치를 나타내고 +1차원을 추가해 3차원에서 4방향을 나타내도록 하여 해당 위치에서 상하좌우의 길 유무를 나타내도록 하였다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 ..
처음 문제를 읽는데 문제 이해가 헷갈렸다. 문제를 해석하면 컨베이어 벨트는 시계 방향으로 원을 그리며 회전한다. 컨베이어 벨트가 회전할 때 위에 있는 로봇은 같이 움직이고, 벨트가 움직인 후 다시 로봇이 오른쪽으로 조건에 맞게 이동이 가능하다!! 그 후, 로봇이 올라가는 위치에서 올라갈 수 있다. 처음부터 로봇이 올라가는 것이 아니라 1단계에서는 로봇이 없는 채로 1번부터 4번까지 진행을 한다. 즉, 1,2번 진행 후 첫 로봇이 3번째에 올라가게 되는 것이다. 위의 문제에서 제시된 과정을 순서대로 작성하고 실행하면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 3..