본문 바로가기

Algorithm76

[알고리즘] 캐시 (2018 카카오) 코딩테스트 연습 - [1차] 캐시 3 [Jeju, Pangyo, Seoul, NewYork, LA, Jeju, Pangyo, Seoul, NewYork, LA] 50 3 [Jeju, Pangyo, Seoul, Jeju, Pangyo, Seoul, Jeju, Pangyo, Seoul] 21 2 [Jeju, Pangyo, Seoul, NewYork, LA, SanFrancisco, Seoul, Rome, Paris, Jeju, NewYork, Rome] 60 5 [Jeju, Pangyo, S programmers.co.kr 예전에 카카오 연습문제를 찾아보다가 한 번 풀었봤던 기억이 있는데 그 당시엔 프로그래머스를 몰라서 프로그래머스에서 푼게 아니라 그냥 이클립스에다가 돌리고 나와있는 테스트 케이스만 돌려봤었.. 2020. 9. 11.
[알고리즘] 최고의 집합 (프로그래머스 Level3) 코딩테스트 연습 - 최고의 집합 자연수 n 개로 이루어진 중복 집합(multi set, 편의상 이후에는 집합으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다. 각 원소의 합이 S가 되는 수의 집합 위 조건을 만족 programmers.co.kr 각 원소의 합이 s가 되는 n개의 원소로 이루어진 중복 집합 중에서 각 원소의 곱이 최댓값이 되는 경우를 찾으라는 문제이다. 수학적으로 생각했을 때 어떤 경우가 최대가 되는지 구하는 건 매우 간단하다. Solution 만약 s = 8이고 n = 2라고 가정해보자. 나올 수 있는 경우는 아래와 같다. 각 원소의 곱 7 12 15 16 케이스 (1, 7) (2, 6) (3, 5) (4, 4) 보다시피 각 원소들이 s / n에 가까워질수록 원소.. 2020. 9. 9.
[알고리즘] 징검다리 건너기 (프로그래머스 Level3) 코딩테스트 연습 - 징검다리 건너기 [2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3 programmers.co.kr 우선 stones 배열의 최대 크기가 20만이기 때문에 O(N) 시간 만에 처리를 해야 한다. Solution 친구들이 뛰어넘을 수 있는 길이는 K만큼이라고 했으니 어느 구간이라도 연속 K개의 돌이 0이 되는 순간 친구들은 더 이상 다리를 건널 수 없다. 즉 배열에 존재하는 K 길이만큼의 구간들 중, 각 구간마다 포함하고 있는 돌의 최댓값이 모든 구간들 중 최솟값이 되는 경우를 찾아야 한다. 이게 무슨 말이냐면 위의 예시 문에서의 K는 3이다. 해당 배열에서 길이가 3인 구간은 총 8개가 나온다. Start Index Finish Index Max Value 0 2 5 1 3.. 2020. 9. 9.
[알고리즘] 이중우선순위큐 (프로그래머스 Level3) 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr 기본적으로 우선순위큐는 Heap을 통해서 구현된다. 하지만 자바에는 기본적으로 PriorityQueue가 구현이 되어있으므로 우선순위큐 자체에는 신경쓸 필요가 없고, 이중우선순위큐라는 점에 주목해야한다. 이 말인 즉슨, 한 큐에서 최대값을 반환, 최소값을 반환하는 두 가지 작업이 동시에 가능해야된다는 점이다. Solution 우선 각각 최대값, 최소값을 반환하는 PriorityQueue 2개를 만들었다. 하지만 데이터를 삭제할 때, 2개의 큐를 모두 동기화시킬 필요가 있다. 때문에 HashMap을 사용했다. HashMap의 Key값은 삽입된 데이터, Value는 현재 큐에 들어있는 해당 데이터의 개수를 의미한다. 이 후에 삽입 때는 특별한.. 2020. 9. 8.