프로그래머스/Level_226 [Level_2] 더 맵게 (C++) 자료구조 Priority_Queue는 Queue 의 한 종류인데 말 그대로 우선순위에 따라 정렬된 Queue라고 보면 도니다. 와 동일한 라이브러리에서 지원 해주며 특정 원소를 push 를 할 때 O(logN)만에 이루어진다. 해당 시간 baebalja.tistory.com 해당 문제는 priority_queue 를 알면 쉽게 풀 수 있다. 값을 삽입 할 때 오름차순으로 정렬 되어있는 min heap으로 생성해준다. 그렇게 한다면 최소값이 루트노드에 위치하게 되며 제일 작은 값을 우선적으로 pop을 해주기 때문에 해당 문제를 쉽게 풀 수 있다. #include #include #include using namespace std; int solution(vector scoville, int K) { int.. 프로그래머스/Level_2 2022. 1. 17. [Level_2] 멀쩡한 사각형 (C++) 해당 문제는 로직을 이해를 해야한다. 입출력에서 W = 8 이고 H = 12 로 주어진다고 가정하자. 해당 그림과 같이 4번 반복하는 것이 보인다. 수식화 해보면 W와 H의 최대공약수 만큼 반복된다. 8과 12의 최대공약수는 4이다. 해당 값 뿐만 아니라 다른 값들도 최대 공약수 만큼 반복된다는 것을 임의의 숫자로 구해보면 알 것이다. 반복되는 그림을 한번 살펴보자. 너비가 2이고 높이는 3이다. 이 값들은 W와 H을 최대공약수로 나눈 값이라는 것을 알 수 있다. 그리고 빈칸의 개수는 반복되는 그림의 "너비+높이-1" 인 것을 알 수 있다. 그렇기 때문에 W와 H가 주어진다. 해당 값의 최대공약수는 반복되는 그림의 개수를 뜻하며 각 그림에서의 빈칸의 사각형의 개수는 (너비+높이-1) 라는 것을 알 수 있.. 프로그래머스/Level_2 2022. 1. 17. [Level 2 / C++ / 카카오] 카카오프렌즈 컬러링북 아 진짜 이 문제 너무 스트레스 받았던 문제이다. 아무리 봐도 틀린게 하나도 없는데 기본 예제만 통과하고 최종은 계속 통과가 되지 않았다. 비쥬얼스튜디오까지 켜가면서 확인을 해가며 배열의 변화 과정 까지 차근차근 살펴봐도 틀린 부분이 없었다. 그래서 프로그래머스 질문하기 페이지에 들어가서 확인해봤는데 문제 오류;; 스트레스가 하늘을 치솟았다. 이 문제에 거의 4시간을 쓴거 같다. 해당 문제는 애초에 전역변수를 생성 하지 말라고 한다. 생성한 전역변수를 solution 함수에 다 넣고 파라미터 값을 변수의 주소를 담아와서 구현을 하였다. 그렇게 하니 문제가 통과되었다. 해당 문제는 bfs를 활용하면 쉽게 풀 수 있다. 지금껏 내가 다뤄왔던 bfs 문제는 항상 비슷한 맥락이였다. 구현을 하기에 살짝 변형한 .. 프로그래머스/Level_2 2022. 1. 17. [Level_2 / C++ / 카카오] 단체사진 찍기 (C++) 모든 경우의 수 정렬 벡터를 정렬할 때 정렬 될 수 있는 모든 경우의 수를 물어보는 문제가 있다. 이러한 경우 해당 함수를 사용한다. 즉, A B C 를 정렬하고 싶은데 모든 경우를 정렬하면, ABC ACB BAC BCA CAB CBA 순으로 정 baebalja.tistory.com 절댓값 반환 두 값의 차이를 물을 때 쓰이는 함수이다. "10-1"의 값은 9 이지만 "1-10" 의 값은 -9가 나온다. 즉, 차이값만 확인하고 싶을 때 abs(값) 을 넣으면 절댓값으로 나오게 된다. #include using namespace std; int.. baebalja.tistory.com * abs(), next_permutation() 함수를 사용하였으니 해당 함수를 모를 시 링크 참고. ex) "N~F=0.. 프로그래머스/Level_2 2022. 1. 13. [Level_2] 전화번호 목록 (C++) 생각 보다 쉬운 문제였다. 여기서 중요한점은 먼저 사전순으로 정렬을 해야한다. 먼저 5개의 임의의 문자열을 상상해보자 "aabbc", "bab", "a", "baz", "babcc" 5개의 문자열을 파라미터로 받아왔다고 가정하자. 해당 문자열을 정렬 시키면 "a" "aabbc" "bab" "babcc" "baz" 이런식으로 정렬하게 되는데 해당 벡터를 두번째부터 시작을 하여 벡터의 사이즈-1 까지 search 한다. search 하면서 이전의 벡터의 문자열이 현재 벡터값에서 find해서 있으면 false 없으면 true 로 반환하면 된다. 여기서 find() 함수를 모르는 분도 계실 수 있으니 잠깐 설명한다. s1.find(s2) : s1 문자열에 s2 문자열이 있으면 시작 인덱스를 반환. 즉, "bab.. 프로그래머스/Level_2 2022. 1. 13. [Level_2] 타겟 넘버 (C++) 이 문제의 해설을 보기 위해 들어왔다면 dfs에 대한 알고리즘을 작성하는데에 어색함이 있는 분들이다. 처음 문제에 접근할 때 4개 정도의 값을 받았다고 가정을 하자. 즉, numbers = {1,1,1,1} 4개의 값을 받았다고 가정을 하고 그림을 그려보자. 개수가 총 4개이며 사이즈는 4이다. 사이즈는 트리에서의 레벨 값이라고 생각하면 된다. 그림을 한번 보자 즉 [인덱스 0] 은 트리에서의 [0번째 레벨] 즉, [0층] 이라는 뜻이다. 각 레벨의 노드들은 자식노드 두개를 만들어내는데 그 값에서 각 레벨에 추가되는 새로운 값을 음수 그리고 양수의 값으로 변환해서 값을 더해간다. 즉, 첫 루프노드에서는 값이 정해져있지 않은데 [0 레벨]인 numbers[0] 값의 "1" 을 "1"x(-1) 과 "1"x(.. 프로그래머스/Level_2 2022. 1. 13. 이전 1 2 3 다음 반응형