C++
-
소수만들기프로그래머스(Programmers) 2021. 11. 10. 22:50
=> DFS를 사용하여 풀 수 있는 문제입니다. => DFS를 사용하며 시작하는 INDEX를 하나씩 늘려가며 중복되는 수의 조합은 제외하였습니다. => DFS를 사용하며 Parameter들의 값이 실제로 올라가는 것인지, 넘기는 값만 올라가는 것인지, 주소를 참조하는 것인지 등을 잘 판단하여 써야 합니다. => 소수인지를 판별하는 함수를 생성하여 소수를 판별하여 전역변수에 소수 여부를 기록하였습니다. *1은 소수가 아니며 2는 소수이므로 미리 표시해둡니다. => 시간초과의 경우에 걸리지 않도록 return문을 잘 넣어줍니다. if(cntAdd == 3) { if(prime[sum]) { cnt++;return; } Prime(sum); if(prime[sum]) { cnt++; } return; } =>..
-
백준 1806 - 부분합백준 algorithm 2021. 11. 1. 23:02
=> 투 포인터 알고리즘의 개념을 알면 풀 수 있는 문제입니다. (저도 이 문제를 풀면서 처음으로 해당 알고리즘을 들었습니다.) => start 점과 end 점의 위치를 변환해가며 S의 값을 넘으면 가장 적은 길이를 찾아내는 방법입니다. => while문에서는 end가 0 인경우에 값을 부분합에 포함하지 않으므로, 이전에 값을 더해주는 과정이 필요합니다. => while문을 통해 start 점이 end점을 앞서지 못하도록 하며, end점이 N(배열 원소의 개수)를 넘지 못하도록 합니다. (배열의 끝점 = (원소의 갯수 -1) ) => 부분합이 S를 넘지 못할 경우 end점을 뒤로 한 칸 미루며 다시 한번 계산합니다. => 부분합이 S인 경우, 최소값을 구하고 다시 한번 end점을 뒤로 미룹니다. ( 이후..
-
최소직사각형프로그래머스(Programmers) 2021. 10. 14. 22:32
제한사항 sizes의 길이는 1 이상 10,000 이하입니다. sizes의 원소는 [w, h] 형식입니다. w는 명함의 가로길이를 나타냅니다. h는 명함의 세로 길이를 나타냅니다. w와 h는 1 이상 1,000 이하인 자연수입니다. 입출력 예 설명 입출력 예 #1 문제 예시와 같습니다. 입출력 예 #2 명함들을 적절히 회전시켜 겹쳤을 때, 3번째 명함(가로: 8, 세로: 15)이 다른 모든 명함보다 크기가 큽니다. 따라서 지갑의 크기는 3번째 명함의 크기와 같으며, 120(=8 x 15)을 return 합니다. 입출력 예 #3 명함들을 적절히 회전시켜 겹쳤을 때, 모든 명함을 포함하는 가장 작은 지갑의 크기는 133(=19 x 7)입니다. #include #include #include #include ..
-
C++ sort함수 cmp 함수유용한 정보 2021. 10. 8. 23:56
C++ STL 중 algorithm 헤더를 사용할 경우 sort() 함수를 사용할 수 있습니다. 해당 함수의 사용법과 독자적으로 만든 cmp 함수를 사용하여 다른 sorting을 하는 방법을 알아보겠습니다. SORT #include #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int arr[5] = {1, 10, 100, 2, 4}; vector arr2 = {1, 10, 100, 2, 4}; sort(arr, arr+5 ); sort(arr2.begin(), arr2.end()); cout
-
복서 정렬하기 C++프로그래머스(Programmers) 2021. 10. 7. 23:25
입출력 예 weightshead2headresult [50,82,75,120] ["NLWL","WNLL","LWNW","WWLN"] [3,4,1,2] [145,92,86] ["NLW","WNL","LWN"] [2,3,1] [60,70,60] ["NNN","NNN","NNN"] [2,1,3] 입출력 예 #1 다음은 선수들의 정보를 나타낸 표입니다. 선수 번호vs 1번vs 2번vs 3번vs 4번승률자기보다 무거운 복서를 이긴 횟수몸무게 1번 - 패배 승리 패배 33.33% 1회 50kg 2번 승리 - 패배 패배 33.33% 0회 82kg 3번 패배 승리 - 승리 66.66% 2회 75kg 4번 승리 승리 패배 - 66.66% 0회 120kg 본문에 서술된 우선순위를 따라 [3,4,1,2] 를 return 합..
-
모음사전 C++프로그래머스(Programmers) 2021. 10. 7. 00:26
#include #include #include using namespace std; vector collection = {'A', 'E', 'I', 'O', 'U'}; //모음 vector dic; //단어모음 void DFS(string word, int len) { if (len == word.length()) { dic.push_back(word); return; } for (int i=0; i DFS를 통해 다 만들어놓은 dic 벡터를 sort 함수를 사용해 정렬한다. => 처음부터 탐색하며 word를 찾았을 경우 return한다. https://codingham.tistory.com/168 DFS, BFS code =>BFS 와 DFS code를 사용하기 위해 미리 정리해두었습니다. //int..
-
상호 평가프로그래머스(Programmers) 2021. 9. 9. 22:36
제한사항 2 ≤ scores의 행의 길이(학생 수) ≤ 10 scores의 열의 길이 = scores의 행의 길이 즉, scores는 행과 열의 길이가 같은 2차원 배열입니다. 0 ≤ scores의 원소 ≤ 100 return 값 형식 0번 학생의 학점부터 차례대로 이어 붙인 하나의 문자열을 return 합니다. 입출력 예 scores result [[100,90,98,88,65],[50,45,99,85,77],[47,88,95,80,67],[61,57,100,80,65],[24,90,94,75,65]] "FBABD" [[50,90],[50,87]] "DA" [[70,49,90],[68,50,38],[73,31,100]] "CFD" #include #include #include #include usin..
-
로또의 최고순위와 최저순위프로그래머스(Programmers) 2021. 9. 6. 23:09
#include #include using namespace std; vector solution(vector lottos, vector win_nums) { vector answer; int Win[7] = {6,6,5,4,3,2,1}; int cntZero=0; int cntMin=0; for(int i=0; i 안알려진 원소의 개수를 세어 cntZero에 넣습니다. => 당첨될 수 있는 최대수와 최저수를 계산하여 answer에 삽입합니다.