본문 바로가기
728x90

coding/algorithm49

[programmers] Lv.2 단체사진 찍기(c++) "일단 해보고 생각하자"를 또 뼈저리게 느꼈던 문제.. 하나하나 돌면 시간 초과가 날거라고 막연히 생각했는데, 그럼 도대체 어떻게 해야할 지 몰라서 검색해보니 하나하나 돌았다고 한다...? 그냥 바로 해봤으면 좋았을걸.. 그럼 next_permutation을 사용하면 끝이죠. 더보기 #include #include #include // next_permutation using namespace std; // 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요. int solution(int n, vector data) { vector kakao_friends = { 'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T' }; int cnt=0; do { bool flag = .. 2022. 5. 7.
[programmers] Lv.2 카카오프렌즈 컬러링북(c++) 더보기 #include #include using namespace std; vector visit; int nb_area; vector x_dir; vector y_dir; int find_area(int i, int j, vector picture){ nb_area++; queue que; que.push({i, j}); visit[i][j] = true; int cnt = 0; while(!que.empty()){ auto[x, y] = que.front(); que.pop(); cnt++; for (int k = 0; k = 0 && x + x_dir[k] = 0 && y + y_di.. 2022. 5. 6.
[programmers] Lv.3 징검다리 건너기(c++) 이분탐색(링크 추가 예정) 더보기 #include #include #include using namespace std; bool continuous_0(vector& stones, int mid, int k){ int zeros=0; for(auto stone: stones){ if(stone - mid > 0) { zeros = 0; } else zeros++; if(zeros >= k) return true; } return false; } int solution(vector stones, int k) { int answer = 0; int min = 1, max = *max_element(stones.begin(), stones.end()); while(min < max){ int mid = (ma.. 2022. 5. 5.
[programmers] Lv.4 동굴 탐험(c++) 4단계는 어려운거같다... 코드를 봐도 cycle을 의미한다하여 응? 왜 그게 cycle을 의미하는건데? 근본적인 질문이 떠오르고 내 방식대로 하려하면 왠지 너무 복잡해진다. 근데 대부분의 답은 내 방식대로 한게 맞는거같다.. 검색하다가 위상정렬(topology sort)라는 것을 알게됐다. (이 해설에 들어갔다가 알게됨 : https://2jinishappy.tistory.com/200, 풀이는 참고하지 않았고, 검색해서 찾아낸 위상 정렬을 설명해주고있는 아래 참고 링크에서 sort 원리만 참고했다.) 다른 방법들도 있는것 같았지만, 이게 제일 명확했다. 더보기 #include #include #include using namespace std; bool topology_sort(vector& di, .. 2022. 5. 5.
[programmers] Lv.3 불량 사용자(c++) 더보기 #include #include #include #include using namespace std; set answer; void find_all(vector& ban_possible, set banned = {}, int i=0){ for(auto possible: ban_possible[i]){ if(banned.find(possible) != banned.end()) continue; else banned.insert(possible); if(i+1 != ban_possible.size()) find_all(ban_possible, banned, i+1); if(i+1 == ban_possible.size() && banned.size() == ban_possible.size()) { an.. 2022. 5. 4.
[programmers] Lv.2 튜플(c++) 간단하게 끝낼 수 있는것은 간단하게 해결하자!! 는 생각이었다. 더보기 #include #include #include using namespace std; vector split(string str){ smatch match; vector res; while(regex_search(str, match, regex("(\\d|,)+"))){ string matched = match.str(); str = match.suffix().str(); str = str.substr(2); smatch number; vector inside; while(regex_search(matched, number, regex("\\d+"))){ inside.push_back(stoi(number.str())); matche.. 2022. 5. 4.
[programmers] Lv.3 경주로 건설(c++) 더보기 #include #include #include #include using namespace std; struct Node{ int x, y; int cost; int dir; Node(int x=0, int y=0, int cost=0, int dir=4) : x{x}, y{y}, cost{cost}, dir{dir}{} }; int solution(vector board) { vector x_dir = {-1, 1, 0, 0}; vector y_dir = {0, 0, -1, 1}; vector possible_dir = {{0, 2, 3}, {1, 2, 3}, {0, 1, 2}, {0, 1, 3}, {1, 3}}; int N = board.size(); vector dp(N, vector(N,.. 2022. 5. 3.
[programmers] Lv.3 보석 쇼핑(c++) 더보기 #include #include #include #include using namespace std; vector solution(vector gems) { map check; vector pos; for(int i=0; i< gems.size(); i++){ check[gems[i]] = 0; if(i+1 != gems.size() && gems[i] != gems[i+1]) pos.push_back(i); } vector answer = {1, (int)gems.size()}; if(check.size() == gems.size()) return answer; else if (check.size() == 1) return {1, 1}; for(int i=0; i *range.rbegin()-*.. 2022. 5. 1.
[programmers] Lv.2 수식 최대화(c++) 처음엔 정규표현식을 사용해 숫자 연산자 숫자를 찾아 계산하고싶었다. (너무 어렵게 생각한것같음) 예시는 통과했지만, 대부분의 tc는 통과하지 못했다. 아직 이유를 파악하지 못했다... 더보기 #include #include #include using namespace std; string add(string str){ smatch match; while(regex_search(str, match, regex("(\\d+[+](-)?\\d+)|(^(-)\\d+[+](-)?\\d+)"))){ long long a, b; sscanf(match.str().c_str(), "%lld+%lld", &a, &b); str.replace(str.find(match.str()), match.str().length(),.. 2022. 5. 1.
[programmers] Lv.1 키패드 누르기(c++) 오랜만에 level 1 더보기 #include #include using namespace std; string solution(vector numbers, string hand) { string answer = ""; vector l_cur = {3, 0}, r_cur = {3, 2}; vector keypads{{3,1}, {0,0}, {0,1}, {0,2}, {1,0}, {1,1}, {1,2}, {2,0}, {2,1}, {2,2}}; for (int num : numbers){ switch(num){ case 1: case 4: case 7: l_cur = keypads[num]; answer += 'L'; break; case 3: case 6: case 9: r_cur = keypads[num].. 2022. 5. 1.
728x90