코딩테스트
[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; }
[골5] 2493 - 탑
#include #include #define y first #define x second using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL), cout.tie(NULL); int n; cin >> n; stack s; for (int i = 1; i > h; while (!s.empty()) { if (s.top().x > h) { cout
[골4] 15683 - 감시
https://github.com/encrypted-def/BOJ/blob/master/15683.cpp 아래는 내 코드다 cctv가 1일 때에 대비해서 풀지 못했다. #include #include #include using namespace std; using IntPair = pair; #define MAX_SIZE 100 #define y first #define x second int map[MAX_SIZE][MAX_SIZE]{ 0 }; int tmpMap[MAX_SIZE][MAX_SIZE]{ 0 }; int h, w; // CCTV 위치 저장용도 vector vC; // 다음 위치 시계 방향 IntPair pos[] { { 1, 0 }, // 북 { 0, 1 }, // 서 {-1, 0 }, /..
[골5] 9663 - N-Queen
#include using namespace std; int n, answer = 0; int vis[15]{ 0 }; // 유망한지 체크 bool Check(int cnt) { for (int i = 0; i < cnt; i++) { auto vis1 = vis[cnt], vis2 = vis[i]; if (vis1 == vis2 || cnt - i == abs(vis1 - vis2)) return 0; } return 1; } void BackTracking(int cnt) { if (cnt == n) { answer++; return; } for (int i = 0; i < n; i++) { vis[cnt] = i; if (Check(cnt)) BackTracking(cnt + 1); } } int ..