본문 바로가기

Programming/Programmers

(40)
[프로그래머스/C++] 이진 변환 반복하기(진법 변환) #include #include #include #include using namespace std; int delZero(string& next_s){ int cnt_zero=0; for(int i=0;i0){ int div = num/2; int mod = num%2; num = div; num_bin = to_string(mod) + num_bin; } return num_bin; } vector solution(string s) { vector answer; int sum_zero = 0; int cnt_trans = 0; while(1){ if(s == "1")break; int cnt_zero= delZero(s); s = dec2bin(s.size()-cnt_zero); sum_zero+=c..
[프로그래머스/C++] N진수 게임(진법 변환) 앞서 풀어본 문제들과 유사하다. #include #include using namespace std; string convert_num(int num, int n){ char code[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; string tmp = ""; while(num/n!=0){ tmp = code[num%n] + tmp; num = num/n; } tmp = code[num%n]+tmp; return tmp; } string solution(int n, int t, int m, int p) { string answer = ""; string tmp = ""; // 임시 배열 tmp에 t*m 정도의 숫자를 담는다...
[프로그래머스/C++] 다음 큰 숫자(진법 변환) bitset STL을 활용하면 간단하게 풀 수 있다. #include #include #include using namespace std; int binary_counter(int num){ return bitset(num).count(); } int solution(int n) { int answer = n+1; while(1){ if (binary_counter(n) == binary_counter(answer)) break; answer++; } return answer; }
[프로그래머스/C++] 124 나라의 숫자(진법 변환) 3진법인데 사용하는 숫자가 1,2,4 #include #include #include using namespace std; string solution(int n) { char nums[3] = {'4','1','2'}; string answer = ""; while(n){ answer = nums[n%3] + answer; n = n/3 - (n%3==0); } return answer; } DFS로 풀었는데 지저분 #include #include #include using namespace std; vector v; void dfs(int n){ if(n==1){ v.push_back(1); return; } else if(n==2){ v.push_back(2); return; } else if(n=..
[프로그래머스/C++] 징검다리 건너기(이분탐색) 이 문제의 경우 효율성 점수가 있는데 이 말인 즉슨 이분탐색을 떠올려야 한다는 뜻이다. 하지만 나는 떠올리지 못했다...(눈물) 여튼, 쉽게 풀려고하면 '돌다리 건널 수 있는지 판단하기 -> 돌다리 건너기(숫자줄이기)'로 풀 수 있지만 시간이 너무 오래걸린다. 그러므로 시간을 줄이기 위해 돌맹이가 가질 수 있는 숫자가 최대로 건널 수 있는 사람의 수라는 것을 생각하고 이분탐색으로 풀수 있다. 1) 조건을 정한다. 2) 이분탐색한다. 1) 조건: "임의의 숫자를 뺐을 때 0보다 작은 돌맹이가 연속해서 K개 있는가?" 2) 이거 기준으로 건널 수 있는 사람의 수를 이분탐색을 진행하면 된다. #include #include #include using namespace std; bool binarySearch(..
[프로그래머스/C++] 불량 사용자(DFS) 푸는 방법은 크게 두가지 인 것 같다. 1)DFS 2)비트마스크 나는 비트마스크를 몰라서 DFS로 풀었고 중복없이 담아주는 set container를 이용하여 조합을 만들었고, set container의 size를 return했다. set은 처음 써봤는데 유용하다!! 유사문제로 백준 1987번 알파벳문제가 있다. #include #include #include #include using namespace std; bool visit[8]; //방문처리 set ansList; //답이 되는 조합을 담는 set -> 크기를 return하면 된다. bool starcmp(string ban, string user){ /* banned_id와 user_id가 일치하는지 판단 */ if(ban.size()!=us..
[프로그래머스/C++] 튜플(문자열) 더럽게 풀었지만 초반 풀이. 1) {}만 제거하고 문자열 형식으로 vector에 담는다. ex) {{20,111},{111}} -> ["20,111","111"] 2) 문자열의 길이 순으로 sort한다. ex) ["20,111","111"] -> ["111", "20,111"] 3) ,을 기준으로 숫자로 변환하고 모두 vector에 담는다. 4) 중복을 제거한다. (정렬없는 중복제거 인터넷에서 찾아서 그냥 했음) #include #include #include #include #include template ForwardIterator remove_duplicates( ForwardIterator first, ForwardIterator last ) { auto new_last = first; for (..
[프로그래머스/C++] 크레인 인형뽑기 게임(스택) 제일 쉬운 문제로 stack 자료구조를 쓸 줄 아는가를 묻는 문제였다. #include #include #include #include using namespace std; int solution(vector board, vector moves) { stack s; s.push(0); int answer = 0; int map_size = board[0].size(); for(int i=0;i