본문 바로가기

Algorithm

(402)
[프로그래머스] 게임 맵 최단거리 / 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){ // 더 높은 우선순위가 있음..
[프로그래머스] 튜플 / map 문제 풀이 #include #include #include #include #include using namespace std; typedef pair ii; vector solution(string s) { vector answer; map map; int n; // '{', ',' '}' 다 공백으로 replace for(int i=0; i> n){ map[n]++; } //벡터를 사용해 map을 value값으로 정렬 ( 튜풀 ) vector v(map.begin(), map.end()); sort(v.begin(), v.end(), [](ii a, ii b){ return a.second > b.second; }); for(ii a : v){ answer.push_back(a.first); } re..
[프로그래머스] 수식 최대화 / stack 문제 풀이 #include #include #include #include using namespace std; long long calc(long long a, long long b, char c){ long long n = 0; switch(c){ case '-': n = a-b; break; case '+': n = a+b; break; case '*': n = a*b; break; } return n; } long long solution(string expression) { vector priors = {{'-', '+', '*'},{'-', '*', '+'}, {'+', '-', '*'}, {'+', '*', '-'}, {'*', '-', '+'}, {'*', '+', '-'}}; long l..
[프로그래머스] 해시 - 전화번호 목록 문제 풀이 #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 // memset using namespace std; bool visited[5][5]; int dx[4]; int dy[4]; bool isSafe ; void dfs(int y, int x, vector place, int count){ visited[y][x] = true; if(count>2 || place[y][x] == 'X') { return; } else { if(count !=0 && place[y][x] == 'P') { isSafe =false; return; } for(int i=0; i=0&&py>=0) && (px