일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 배열
- HTML
- 네이버
- HashSet
- coding test
- Queue
- SQL
- Naver
- Java
- Eclipse
- CSS
- Stack
- Coding
- 자료구조
- 스파르타코딩클럽
- 정렬
- point queue
- programmers
- compare()
- Python
- 자바
- 우선순위큐
- javac
- 코딩테스트
- array
- HashMap
- 해쉬
- 프로그래머스
- string
- hash
- Today
- Total
목록네이버 (8)
youngik
이 문제는 처음에 소수를 판별하는 부분까지 구현을 했다가, 소수의 조합을 어떻게 만들어야 할까? 그 부분을 구현하지 못해서 애를 먹었던 부분이었다. (해답은 재귀함수에 있었다.) 위 문제를 분석해보았을 때, 단순하다 1. 각 숫자별로 조합을 해서, 그 수가 소수이면 count를 하면 된다. 2. 중복값은 1개로 계산하고 앞에 0이 붙은 수는 없다고 생각하면 된다. 우리가 수학시간에 자주 배웠던 nCr => n개의 숫자 중에서 r개를 뽑는 연산 재귀함수로 구현했을 때에는 int recursion(int[] arr, int[] result, int n, int r){ if(r==0){ return; } else{ for(int i=0; i
위 문제를 분석해봤을 때, 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. 스파이가 의상을 입을때에는 의상의 이름 정해지지 X (무엇이 들어올 지 모름) 2. 의상을 입을 때 1가지만 입을 수도 있음. {모자, 바지, 얼굴} 이라고 했을 때, 모자 1개만 입을수도 있음 3. 경우의 수를 고려해봤을 때, 1) 의상의 종류의 수 N=1일 때, 해당 의상의 종류의 수 (번갈아서 입을때만 가능) 2) 의상의 종류의 수가 N>=2일 때, 1가지만 입을수도 있기 때문에 {모자, 바지, 얼굴} 이라고 했을 때, (N+1)(M+1)(K+1).... -1이 나옴.
먼저 위 문제를 분석을 해보았을 때, 1. participant의 수가 항상 completion+1이다. 2. 동명이인이 없을 때에는 participant에서는 존재하지만 completion에 없는 String 출력 3. 동명이인이 있을 때에는 participant의 동일인물의 이름을 카운트해서, completion 동일인물의 이름의 카운트와 비교를 해서 같지 않는 String 출력 처음에는 배열로 위 문제를 만들었었는데, 정답은 맞았지만 효율성 문제에서 통과하지 못했다ㅠ 2중 반복문을 썻기 때문에 100,000 * 100,000번의 연산이 들어가서 그런 것 같다. 그래서 위 문제가 해쉬에 포함이 되기 때문에 Hashmap로 다시금 코드를 작성했다. Hashmap는 (key, value)의 쌍으로 들어가..
먼저 위 문제를 분석을 해보았을 때 1. phone_book의 각 String 값을 HashMap에 동일한 부분이 있으면 넣지 X, 없으면 Hash에 넣는다. 2. HashMap에 넣게된다면 동일한 key가 없기 때문에, 동일하게 접두사 부분이 있으면 길이가 줄어든다. (*따라서 phone_book의 길이와 Hash에 넣은 길이가 다르면 접두사가 있다는 말) 1번을 어떻게 구현을 해야할지,, 너무 생각보다 너무 잘 안떠올라서 이래저래 생각도 해보고, 머리 아파서 침대에 누웠는데 어떻게 할지 생각이 났다. (*그런데 피곤해서 자다가 일어나서 만들었다는 것ㅋㅋㅋ) 내가 생각한 방법은 접두사는 앞에서 붙이는 부분이기 때문에 String의 값을 charAt()으로 한개씩 불러오는 것이었다. 각 String을 불..
먼저 위 문제를 분석해봤을 때, 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부터 시작하기 때..