목록전체 글 (384)
hwooo

https://leetcode.com/problems/merge-k-sorted-lists/description/ 풀이현재 리스트의 맨 앞 값을 우선순위 큐에 저장해두고, 오름차순으로 정렬한다. 큐에서 값을 하나씩 빼 root에 연결한다. 이 때, 다음 값보다 현재 값이 작을 때까지 값을 넣은 후, 리스트에 값이 남아 있으면 다시 큐에 넣어 순회한다. 더 빠른 풀이가 있길래 확인했는데, 리스트를 전부 순회하며 모든 수를 하나의 컨테이너에 넣고 정렬 후 이를 리스트 형태로 만들어 반환했다... 내부 소팅의 최적화가 잘 되어 있다는 걸 알려주고 싶은 문제였나 싶었다.C/C++ 코드class Solution {public: typedef pair ii; ListNode* mergeKLists(vec..

https://leetcode.com/problems/number-of-provinces/description/풀이모든 노드를 탐색하며 아직 방문하지 않았다면 해당 노드와 연결된 노드들을 순회한 후 province의 수를 증가한다.C/C++ 코드class Solution {public: int findCircleNum(vector>& isConnected) { bool visited[200] = {0, }; int cnt = 0; int n = isConnected.size(); queue q; for (int i = 0; i Java 코드class Solution { public int findCircleNum(int[][] i..

https://leetcode.com/problems/longest-repeating-character-replacement/description/풀이투 포인터임은 알았는데, 세부 조건을 모르겠어서 답지를 봤다.현재 범위에서 가장 많은 알파벳 수를 저장한 후, 해당 범위에서 그 알파벳을 제외한 다른 알파벳의 개수가 k개가 넘을 때, k개를 만족시킬 때까지 범위를 조정한다.C/C++ 코드class Solution {public: int characterReplacement(string s, int k) { int l = 0, maxLen = 0, maxAlphaCount = 0; int alpha[26] = {0, }; for (int r = 0; r k) { ..

https://school.programmers.co.kr/learn/courses/30/lessons/64063 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이처음에는 set을 사용해 중복을 확인하고, 중복이라면 현재 원하는 방 번호부터 하나씩 증가하며 중복을 확인하였다.정확도 테스트는 통과하였으나 효율성 테스트를 통과하지 못 했다.room_number가 [1,1,1,1,1,1, ... , 1]과 같은 형식으로 들어온다면 result를 구하기 위해 1부터 탐색해야 하는데 이 경우 1 ~ 2, 1 ~ 3, 1 ~ 4, ..., 1 ~ 200,000까지 일일히 확인해 효율성이 좋지 않다. 다른 방법이 ..

https://school.programmers.co.kr/learn/courses/30/lessons/12938 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이원소들의 곱이 최대가 되려면 원소들 간의 크기 차이가 최소로 나야 한다.따라서 주어진 s를 n으로 나눠 크기가 n인 배열을 만들었고, 나머지는 각 원소에 1씩 값을 더하여 배열을 구성했다.더하는 작업을 끝 인덱스부터 했기에 불가능한 경우의 수는 answer[0]의 값이 0인지를 확인하여 반환했다.C/C++ 코드#include #include using namespace std;vector solution(int n, int s) { //..

https://leetcode.com/problems/minimum-operations-to-convert-number/description/풀이모든 수를 탐색하며 3가지 경우의 수를 확인해야 한다.입력되는 숫자의 범위는 넓지만, 탐색하는 수의 범위는 0 ~ 1000 사이에 있는 값만 사용할 수 있으므로 visited 배열을 이용해 탐색 여부를 확인한다.이를 queue에 넣어 BFS로 탐색하며 최소 연산 횟수를 찾는다.C/C++ 코드class Solution {public: int visited[1001]; queue q; int minCnt = INT_MAX; // 조건 확인 후 큐에 삽입 void checkGoalAndMoveNext(long long next, int cn..

https://leetcode.com/problems/minimum-number-of-swaps-to-make-the-string-balanced/description/풀이힌트를 보고 투 포인터와 스택을 사용하는 것임을 알았다.처음(C/C++ 코드)에는 인덱스를 늘려가며 닫힌 괄호를 만났을 때 열린 괄호가 있는지를 확인하고, 없다면 뒤의 열린 괄호를 찾아 swap 하였다. 속도가 느려서 답지(Java 코드)를 찾아보니, 닫힌 괄호를 만났을 때 열린 괄호의 개수만을 세서 확인해서 이 방식으로도 풀어보았다. 열린 괄호와 닫힌 괄호의 갯수는 동일하므로, 남아있는 열린 괄호의 개수(openCnt) 값이 짝을 다 맞추고 남아있는 불균형의 개수이므로 해당 값이 최소 교환 횟수를 보장한다.C/C++ 코드class ..

https://school.programmers.co.kr/learn/courses/30/lessons/67258 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이투포인터를 사용하는 것까진 알겠으나, 정확히 어떻게 사용해야 할지 모르겠어서 답지를 봤다.'end로 모든 보석이 들어간 범위를 구한 후, start로 그 범위를 좁힌다'는 아이디어를 보고 set으로 모든 보석의 종류를 먼저 구했다.이후 end를 늘려가며 현재 범위에 모든 보석이 들어 있는지를 확인했다. 이후 start를 늘리며 start에 위치한 보석을 제외해도 현재 범위에 모든 보석이 들어 있는지 확인한다. 이 범위의 최소 값을 구해 반..