일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- 18222
- to display the conditions report re-run your application with 'debug' enabled
- Error
- 2167. 2차원 배열의 합
- 투에모스문자열
- 이산수학
- 별자리 만들기
- 호석이두마리치킨
- Java
- Error fetching remote repo 'origin'
- EC2
- 소가길을건너간이유6
- 자바
- documentationpluginsbootstrapper
- 설정
- 20055
- 14466
- dockercompose
- SpringBoot
- 프로그래머스
- 백준
- 2108_통계학
- jenkins
- CMD
- 이클립스
- docker
- 날짜일수
- 21278
- Eclipse
- Today
- Total
목록알고리즘/프로그래머스 (12)
계단을 오르듯이
상하의 알파벳은 수월했으나 좌우의 커서이동 부분이 힘들었다. 커서이동을 최소로 하기 위해 A가 연속되는 부분의 연산을 해주어야 한다. 또한 가장 key-point는 BBBBAAAAAABB 라고 가정하면, 이 경우에는 뒤를 탐색한 후 다시 앞으로 돌아오는 경로가 가장 적은 수의 커서이동이 된다. 그 이유는 커서를 이동을 하여 연산을 한 후 다시 방향을 돌려야 할 때 커서로 이동한 만큼 다시 반대방향으로 돌아오는 이동을 해야하기 때문이다. 즉 앞에서 시작하면 (좌 -> 우를 시작으로) 3번을 갔다가 다시 3번을 돌아와 2번을 가는 경우는 8번의 커서이동이 되고, 뒤에서부터 앞으로 오는 경우는 2번으로 맨 뒤 오른쪽으로 가서 다시 2번으로 앞으로 돌아오며 3번의 커서이동을 더해 커서이동이 마무리 된다. 이 경..
h의 범위가 될 수 있는 최대의 범위는 citations 배열의 길이만큼이므로 0부터 길이까지만큼 탐색한다. 배열은 오름차순으로 정렬한 후 해당 배열의 큰 수부터(뒤에서부터) 탐색하여 해당 수만큼의 개수를 만족하면 빠져나오고 answer의 값을 갱신해주고, 더 이상 만족하지 못할 시 모든 탐색을 종료한다. 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 import java.util.*; class Solution { public int solution(int[] citations) { int answer = 0; int len = citations.length; Arrays.sort(citations); for(int i=0;i=0;..
이 문제는 자료구조를 사용하지 않고 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 ..
적절한 자료구조를 생각해야했고, 나는 HashMap과 ArrayList를 이용하였다. 적절한 오름차순의 정렬을 통해 순차적으로 문제를 풀어나갔다. 역시 알고리즘은 맞나..? 고민하지 말고 우선 해보는 시도가 나아가는 발걸음이다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869import java.util.*; class Solution { public int[] solution(String[] genres, int[] plays) { int[] answer = {}; int len = genres.length; Map ma..
주어진 이중 배열은 서로 연결을 확인하는 배열로 이용하고, 선택된 노드인지를 확인하기 위한 배열을 하나 만들었다. dfs 재귀방식을 통해 네트워크의 연결을 알아내었다. import java.util.*; class Solution { public int solution(int n, int[][] computers) { int answer = 0; boolean[] visited = new boolean[n]; for(int i=0;i

'+' 와 '-' 를 모든 경우에 대입하여 알아보는 문제이므로, 부분집합을 이용해서 선택되면 +를 안되면 -를 연산하도록 했다. class Solution { static int count; public int solution(int[] numbers, int target) { int answer = 0; boolean[] add = new boolean[numbers.length]; subset(0,add,numbers,target); answer = count; return answer; } private static void subset(int cnt, boolean[] add, int[] numbers, int target){ if(cnt == numbers.length){ int sum = 0;..