일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 배열
- programmers
- coding test
- Queue
- 정렬
- HTML
- 코딩테스트
- 자바
- 프로그래머스
- SQL
- HashSet
- 자료구조
- 네이버
- Stack
- 우선순위큐
- array
- javac
- Eclipse
- compare()
- hash
- HashMap
- string
- 해쉬
- Java
- CSS
- 스파르타코딩클럽
- Coding
- Naver
- point queue
- Python
- Today
- Total
목록Queue (7)
youngik
위 문제를 분석해봤을 때, 1. 명령어는 String 문장의 형태이며 I가 들어왔을 때에는 queue에 삽입 D 1(최댓값 삭제), D -1(최솟값 삭제) 연산 2. return값은 [최대값, 최솟값] 형태이며 queue가 비어있을 때에는 [0,0]으로 출력 3. 빈 queue의 값을 삭제했을 때에는 그 연산을 무시한다. 위 문제를 풀 때 나는 PriorityQueue를 사용했고, 최솟값은 poll()로 자연스럽게 제거가 가능하며 1. max값 출력 2. max값 삭제를 따로 함수로 구현을 해서 사용했다. 처음에는 priorityqueue의 정렬순서를 내림차순으로 하려고 했다가, min값 삭제 or 조회부분에서 다시 순서를 바꾸어주어야 하기 때문에 max값을 차례를 돌면서 찾았다. max값 출력) -> ..
처음부터 많이 헤매였던 문제이기도 하고, 도저히 정렬방법에 대해서 생각을 못하다가 간단히 어떻게 정렬을 해야되는지 힌트를 보고나서 쉽게 풀었던 문제였던 것 같다. 처음에 내가 생각했던건 1의자리수부터 비교해서 높은 순서대로 나열을 하고 이후에 동일한 1의 자리수를 가진 값들을 내림차순으로 정렬을 했는데,, (반례 : 300,30,3) 10, 100단위로 떨어지는 수들은 가장 작은 값들이 먼저 와야하기 때문에 만족을 하지 못했다. 그래서 가장 쉬운 방법은 compare() 함수를 이용해서 Integer타입을 String으로 받아온 후에 s1+s2가 큰 지, s2+s1이 큰지 비교해서 정렬하는 것이다. (ex) 3, 40이 있다면 340이 큰지, 403이 큰지) 사실상 위 코드는 다른분의 코드를 가져온 것이..
이번 문제는 heap 문제분류에서 있던 문제이다. 먼저, heap에 대한 이해가 먼저 되어야 했기에 heap에 대해서 알아보자! heap - 최댓값, 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전 이진트리이다. - A, B가 각각 부모, 자식 노드라면 대소관계가 성립 (최대 힙 -> A>B) / (최소 힙 -> A 배열 길이보다 많은 연산을 했을 때 -1 리턴하기
먼저 위 문제를 분석해봤을 때, 1. (중요도, 위치값)를 가진 Point쌍의 값을 queue에 넣는다. 2. 각 cycle마다 현재 남은 queue의 중요도가 가장 큰 값과 비교를 한다. 3. 맨 앞에 값을 poll() 해봤을 때 max값과 일치하면 output queue에 넣고 작으면 다시 queue에 add()한다. (*1-3번의 작업은 priority 큐가 비어있을 때 까지 반복) 4. 1-3번의 작업이 끝나면 output queue에서 location과 일치하는 위치값을 출력한다. (몇번째로 출력되는지) -> 예제 문제에서 봤을 때, 동일한 값이라도 출력되는 순서가 다르기 때문에 원래 queue에서 위치값을 같이 저장했다. -> 몇번째로 인쇄됐는지 결과값을 물어볼때 0이 아닌 1부터 시작하기 때..
스택의 3번째 문제이다. 먼저 위의 문제를 분석해보면서 1. Queue에 각 작업을 등록하고, 각 작업의 값을 speed값을 더한다. 2. 맨 앞에 작업보다 뒤에 작업이 먼저 100이 될 수가 있고, 바로 나오는 것이 아니라 앞 작업이 100이 되어야 나올 수 있어야 함. 3. 결과값으로 출력해야하는 return값의 배열길이는 한번에 나오는 작업의 수 *따라서 전체 작업의 수의 길이와 배열길이는 다르다! * 여기서 progresses 값만 queue에 넣고 speed는 그대로 배열로 사용하려고 하다가, queue에서 progresses값이 나가면, speed 배열은 그대로 유지하기 때문에 이전 문제에서 사용했던 큐를 사용해서 x = progresses, y = speeds 를 넣었다. * 구현한 기능 1..
먼저 위 문제를 분석해보았을 때 1. 배열의 i번째의 값에서 i+1의 값을 차례대로 비교해 나간다. 2. 비교를 해서 그 값보다 같거나 클때 count를 1씩 증가시킨다. 이 문제는 처음에 보고 아? 쉽네라는 생각으로 10분도 안되서 코드를 짰던 것 같다. 굳이 배열이 주어지는데 스택과 큐로 구현할 필요도 없어보여서 테스트 케이스를 성공하고 제출을 했는데, 왠걸,, 1개의 case빼고는 다 실패하지 않는가?? 처음 짠 코드 부분인데, 왜 안되지? 라는 생각으로 질문에 들어가보니 입출력 예제의 3초때를 잘 보아야 한다라는 말이 있었고, 나는 결과값이 (전체비교횟수 - i보다 작은 수)라고 생각했었는데 그것이 아닌 (i보다 작은 수가 있었을 때에는 그 거리만큼 값)을 출력하는 것이었다. (*말장난,,) 그래..
이번 문제는 처음부터 삽질을 많이 한 결과로 볼수가 있다ㅠ stack & queue에 대한 개념을 먼저 잡아야 했고, 다리를 통과하는 것은 stack보다는 queue가 더 적합한 것 같아서 queue를 통해 구현하기로 했다. *기본적인 stack 선언 Queue temp = new LinkedList(); Queue는 LikedList 형태로 구현이 되어있고, array와 같은 개별적으로 존재하는 것이 아닌 값들이 서로 연결되어있어 메모리의 빈 공간을 차지하지 않는다는 장점이 있다. 하지만 장점이 있으면 단점이 있다는 것인데, 자료값을 search 하거나, 삽입, 삭제 등을 할 때 시간이 걸린다. array는 int arr[4] = 0; 같이 직관적으로 삽입할 수 있으니!! ▶위 문제를 먼저 분석해본결과..