본문 바로가기

Algorithm/Programers - C++

(121)
[프로그래머스] 조이스틱 문제 풀이 #include #include #include using namespace std; int sol1(char c, string al){ int val = 0; int p2 = find(al.begin(), al.end(),c) - al.begin(); if(p2 > al.size()/2){ p2 = al.size() - p2; } return p2; } int solution(string name) { int answer = 0; int idx, move = 0; int l_len = 0, r_len = 0; string al = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 1. 가장 긴 A len 구하기 move = name.size() -1; // 정방향 for(int i=..
[프로그래머스] 게임 맵 최단거리 / BFS, DFS, Queue 문제 풀이 1. (DFS) #include #include // memset using namespace std; bool visited[100][100]; int dx[4]; int dy[4]; int N, M, min_count = 10000; bool enable = false; vector map; /********************************* dfs로 구현 버전 테스트 케이스는 전부 통과하였으나 효율성을 통과하지 못함 *********************************/ void dfs(int y, int x, int count){ count++; if(y == N-1 && x == M-1){ if(count < min_count) min_count = count; en..
[프로그래머스] 완전탐색 - 소수찾기 / 순열, next_permutation 문제 풀이 #include #include #include #include using namespace std; vector visited; set ss; bool sosu(int n){ if(n
[프로그래머스] 정렬 - 가장 큰 수 / multimap, sort, compare 문제 풀이 #include #include #include using namespace std; string solution(vector numbers) { string answer = ""; multimap map; for(auto number : numbers){ string n = to_string(number); while(n.size() < 4) { // numbers의 원소는 0 이상 1,000 이하 n = n + n; } n = n.substr(0, 4); map.insert(make_pair(n,to_string(number).size())); } for(auto m : map){ string str = m.first; answer = str.substr(0, m.second) + answ..
[프로그래머스] 프린터 - 스택/큐, max_element, min_element 문제 풀이 #include #include #include using namespace std; int solution(vector priorities, int location) { queue q; int index = location, j, next, count = 0; bool en_pop = true; for(int pri : priorities){ q.push(pri); } while(1){ en_pop = true; j = q.front(); q.pop(); if(q.empty()){ count++; break; } int size = q.size(); for (int i=0; i j) en_pop = false; q.push(next); } if(!en_pop){ // 더 높은 우선순위가 있음..
[프로그래머스] 해시 - 전화번호 목록 문제 풀이 #include #include #include using namespace std; bool solution(vector phone_book) { bool answer = true; sort(phone_book.begin(), phone_book.end()); string str; //이중포문은 시간초과 /* for(int i=0; i
[프로그래머스] 행렬 테두리 회전하기 문제 풀이 #include #include #include using namespace std; vector set_v(int a, int b){ vector v; int n = 1; for(int i=0; i q[2]-1) y--; else x++; } else if(x == q[2]-1){ //
[프로그래머스] 짝지어 제거하기 / stack(LIFO) 문제 풀이 1 #include #include using namespace std; int solution(string s) { int answer = 0, i = 0; while (i < s.length()) { if (s[i] == s[i + 1]) { s.erase(i, 2); i = 0; } else i++; if (s.length() == 0) return 1; } return 0; } while문으로 푼 풀이이다. 정답은 다 맞혔으나 효율성 테스트를 전혀 통과할 수 없었다. 알파벳이 2개인 짝을 제거할 경우 다시 처음부터 탐색하기 때문에 비효율적일수밖에 없었을 것이다. 풀이 2 #include #include #include using namespace std; int solution(stri..