level3

    [3] 등굣길

    #include #include #define SIZE 101 using namespace std; int solution(int m, int n, vector puddles) { int check[SIZE][SIZE]{0}, vis[SIZE][SIZE]{0}; for(int i=0;i

    [3] 단속 카메라

    #include #include #include using namespace std; int solution(vector routes) { int answer = 1; sort(routes.begin(), routes.end()); int tmp = routes[0][1]; for (auto a : routes) { if (tmp = a[1]) tmp = a[1]; } return answer; }

    [3] 베스트 앨범

    참고 사이트 : 알고리즘(C++) / 프로그래머스 level 3 : 베스트앨범 (tistory.com) #include #include #include #include #include #include #include using namespace std; using StringPair = pair; using IntPair = pair; // 내림차순 정렬 bool CmpStr(StringPair& a, StringPair& b) { return a.second > b.second; } bool CmpInt(IntPair& a, IntPair& b) { return (a.first == b.first) ? a.second b.first; } vector soluti..

    [3] 이중 우선순위 큐

    삭제 추가가 용이한 이중 연결 리스트를 사용했다. #include #include #include #include using namespace std; vector solution(vector operations) { vector answer; list bl, sl; for (const auto& item : operations) { string str = item; str.erase(remove(str.begin(), str.end(), ' '), str.end()); if (str[0] == 'I') { string tmpStr = ""; for (int i = 1; i < str.size(); i++) tmpStr += str[i]; bl.push_back(stoi(tmpStr)); bl.sort(..

    [3] 숫자 게임

    #include #include #include using namespace std; int solution(vector A, vector B) { int answer = 0; sort(A.begin(),A.end()); sort(B.begin(),B.end()); int idxA=A.size()-1,idxB=B.size()-1; while(idxA >= 0) { int valA=A[idxA],valB=B[idxB]; if(valB > valA) { answer++; idxB--; } idxA--; } return answer; }

    [3] 가장 먼 노드

    이 문제에는 함정이 존재한다 따라서 SIZE를 20001로 지정한다. #include #include #include #include using namespace std; #define SIZE 20001 vector vGraph[SIZE]; vector vCount(SIZE); bool vis[SIZE]; void DFS(int start) { queue q; q.push(start); vis[start] = true; while (!q.empty()) { auto front = q.front(); q.pop(); for (int i = 0; i < vGraph[front].size(); i++) { auto val = vGraph[front][i]; if (!vis[val]) { vis[val] = ..

    [3] 섬 연결하기

    #include #include #include using namespace std; vector vIsland(100); bool Cmp(vector a, vector b) { return a[2] < b[2]; } int FindParent(int idx) { if (vIsland[idx] != idx) vIsland[idx] = FindParent(vIsland[idx]); return vIsland[idx]; } int solution(int n, vector costs) { int answer = 0; sort(costs.begin(), costs.end(), Cmp); for (int i = 0; i < n; i++) vIsland[i] = i; for (int i = 0; i < costs...

    [3] 단어 변환

    #include #include #include #include using namespace std; #define MAX 50 vector vWord; string targ = ""; bool vis[MAX + 1]; int ans = INT_MAX; void DFS(string begin, int depth) { if (targ == begin) { ans = min(ans, depth); return; } for (int i = 0; i < vWord.size(); i++) { int cnt = 0; for (int j = 0; j < vWord[i].size(); j++) { if (begin[j] != vWord[i][j]) cnt++; if (cnt == 2) break; } if (cnt =..

    [3] 야근 지수

    #include #include #include using namespace std; long long solution(int n, vector works) { priority_queue pq(works.begin(), works.end()); for (int i = 0; i 0) { int tmp = pq.top(); pq.pop(); pq.push(tmp - 1); } } long long ans = 0; while (!pq.empty()) { ans += pow(pq.top(), 2); pq.pop(); } return ans; }

    [3] 입국 심사

    #include #include #include using namespace std; long long solution(int n, vector times) { long long min = 1, max = (long long)n * (*max_element(times.begin(), times.end())); long long answer = 0; while(min