problem solving (93) 썸네일형 리스트형 [프로그래머스]구명보트 정렬을 한 후 가장작은 값의 위치(front)와 가장 큰 값의 위치(end)의 값을 더한 값이 limit보다 크다면 한 명밖에 못타기 때문에 end를 한칸 줄여 가장 큰 값을 하나 제거한다. 반대로 limit보다 작다면 두 명이 탈 수 있기에 front++, end--를한다. #include #include #include using namespace std; int solution(vector people, int limit) { int answer = 0; sort(people.begin(), people.end()); int front = 0; int end = people.size() - 1; while(front limit) { end--; answer++; } else if (people[fr.. [프로그래머스]괄호 변환 그냥... 문제에서 말하는대로 그대로 구현하는게 정답 문제를 잘 이해하지는 못했는데 원하는 바를 잘 구현한 거 같다. #include #include #include using namespace std; string translate(string p, int front, int end) { string answer = ""; int open = 0, close = 0; for(int idx = front; idx [프로그래머스]숫자 야구 완전탐색 문제인 거 같다. 3자리수 전부를 주어진 baseball이랑 비교해서 4중 반복문을 구성했다. 3자리수 전부를 확인해보는데 각각의 수마다 baseball이랑 비교해 strike와 ball의 수를 구한다. 전부 strike와 ball 수가 동일하다면 가능한 답이므로 정답의 수를 하나 추가한다. #include #include using namespace std; int solution(vector baseball) { int answer = 0; for(int idx = 111; idx [프로그래머스]전화번호 목록 중복을 찾으면 false를 반환하도록했다. 처음에 정렬을 하는 이유는 1234, 123, 12와 같이 앞의 수가 더 길다면 비교할 때 접두어가 다르기 때문이다. #include #include #include #include using namespace std; bool solution(vector phone_book) { sort(phone_book.begin(), phone_book.end()); map mainMap; for (int idx = 0; idx [프로그래머스]H-index val번 이상 인용횟수 중 가장 큰 val을 찾으면 된다. 주어진 배열인 citations를 정렬하고, val을 0부터 citations배열의 마지막까지 +1씩 늘려가면서 lower_bound를 이용해 val번 이상의 가장 최저점을 찾아 인용횟수를 구하고 조건에 부합하는지 검사한다. 조건에 맞다면 answer변수에 val을 넣어준다. #include #include #include using namespace std; int solution(vector citations) { int answer = 0; int val = 0; sort(citations.begin(), citations.end()); while(val = val ? val : answer; val++; } return answer; } .. [프로그래머스]더 맵게 힙을 이용해서 문제를 해결할 수있다. 처음엔 힙을 사용하지 않는 방법으로 문제를 해결하려 했는데 효율성의 문제로 틀렸다. #include #include #include #include using namespace std; int tree[1000001] = { 0 }; int pop(int *max) { int val = tree[1]; int cur = 1, child = 2; tree[1] = tree[*max]; *max = *max - 1; while (child [프로그래머스]소수 찾기 #include #include #include using namespace std; bool check[8];vector store;string str; //부분수열의 합void DFS(string val) { store.push_back(val); for(int idx = 0; idx [프로그래머스]큰 수 만들기 높은 자리수를 기준으로 차례로 검사해 큰 수를 알아낼 수 있다. 그래서 최대 k(제거해야 할 개수)만큼 제거하기위해 이중 반복문을 사용한다. 안쪽 반복문에서는 가장 큰 수를 골라내고 위치를 pos변수에 저장한다. 안쪽 반복문이 종료된 후 제거해야할 수인 k값이 남았다면 k와 현재 인덱스인 i를 갱신한다. #include #include using namespace std; string solution(string number, int k) { string answer = ""; int size = number.length() - k; int max = 0, pos = 0; for (int i = 0; size != answer.length(); i++) { for(int j = i; j 0) { k -=.. 이전 1 2 3 4 5 6 7 8 ··· 12 다음