덧칠하기
·
공부/Code Cata
vector 'wall' 를 만들어서 색칠해야 하는 부분은 1로, 색칠하지 않아도 되는 부분은 0으로 만든 후 2중 for문을 통해 몇 번 칠해야하는지를 구하는 방식으로 문제를 풀었다.그런데 루프를 한 번만 사용해서 해결한 풀이를 확인했고 참고해서 다시 풀어보았고 이는 p.s 중 greedy 에 해당하는 접근 방식으로 보여진다.예전에 C++강의를 들으면서 동전 거스름돈 문제를 예시로 greedy를 스쳐가듯 배웠었는데, 잘 기억이 나지 않아 문제 해결 방식을 설계할 때 떠오르지 않았던 것 같다. greedy 알고리즘에 대한 추가적인 정리https://dong-grae.tistory.com/103 Greedy 알고리즘Greedy 알고리즘이란? 현재 단계에서 가장 최선이라고 생각되는 선택을 반복적으로 수행하여..
소수가 되는 경우 카운팅 (재귀호출)
·
공부/Code Cata
문제를 보는 순간 모든 경우를 다 계산해봐야된다고 생각해서 재귀호출로 해결하고자 했다.근데 초기 작성 코드에서 결과 값이 기댓 값 보다 많이 커서 원하지 않는 중복이 발생했다고 생각했다.이를 해결하기 위해 고민하다가, 시작 인덱스를 매개변수로 추가적으로 전달해서 현재 인덱스보다 큰 인덱스를 탐색하도록 했다.  *초기 작성 코드 (오류 있음)더보기#include #include #include using namespace std;int Check_PrimeNum(int sum){ for (int i = 2; i & nums, vector& used, int& result, int sum, int count){ if (count == 3) { result += Check_Prim..
모의고사 / 완전 탐색
·
공부/Code Cata
3명의 패턴이 달라서 크기가 다르기 때문에 각 사람마다 인덱스를 어떻게 접근해야할지 고민이 되었다.그래서 3명의 정답 개수를 세는 함수를 만들어서 한 사람마다 이 함수를 호출해 정답의 개수를 도출하게끔 설게하였다. 그런데 다른 사람의 풀이를 보던 중 나머지 연산자를 활용해서 쉽게 사람 패턴 인덱스와 정답의 인덱스를 매치 시키는 것을 보고 그 방법을 활용해서 다시 풀어보았다. *초기 코드더보기#include #include #include using namespace std;int correct_answer(const vector& answers, const vector& p){ int count = 0; int p_size = p.size(); int t = 0; for (int i..
과일장수
·
공부/Code Cata
*초기 작성 코드더보기#include #include #include #include using namespace std;void check_apple(unordered_map& List, int k, const vector& score){ for (int i = 1; i score){ unordered_map apple_cnt; int result = 0; // score 점수별로 사과가 몇 개 있는지 정리 check_apple(apple_cnt, k, score); // k점수부터 1점수까지 m개씩 포장해서 점수 계산 for (int i = k; i >= 1; --i) { // 만약 개수가 m보다 작다면 밑에 점수 개수에 저장 if..
priority_queue 우선순위 큐 활용
·
공부/Code Cata
명예의 전당의 최하위 점수를 매일 기록해 반환하는 문제이다.즉 k가 3이라고 한다면 탑3를 매일 선정하고 그 중 최하위 점수를 answer 리스트에 저장해 반환하면 되는 문제인데 예시 경우에는 올바르게 작동했지만, 여러 테스트 케이스를 채첨해봤을 때 오류가 발생했었다.  *초기 오답 코드더보기#include #include #include using namespace std;vector solution(int k, vector score) { vector answer; priority_queue, greater> pq; for(int i = 0; i 0 && score[i] = k) { pq.pop(); pq.push(score..
대칭되는 문자열 만들기
·
공부/Code Cata
주어진 food 배열을 가지고 규칙에 맞게 왼쪽과 오른쪽이 대칭되는 문자열을 만들어 반환하는 문제였다. *초기 작성 코드#include #include #include using namespace std;string solution(vector food) { string answer = ""; for (int i = 1; i ()); answer += '0' + temp; return answer;}왼쪽을 먼저 규칙에 맞게 만든 후 '0' 과 반대로 정렬한 문자열을 추가해서 완성시키도록 하였다.일단 코드가 길어 가독성 면에서 좋지 않고 2중 for문에 sort까지 사용해서 아쉽다는 생각이 들었다.  *다른 사람 풀이 참고해 수정 ver_1#include #include using n..