프로그래머스
-
소수만들기프로그래머스(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; } =>..
-
신규아이디 추천프로그래머스(Programmers) 2021. 11. 9. 00:17
예를 들어, new_id 값이 "...!@BaT#*..y.abcdefghijklm" 라면, 위 7단계를 거치고 나면 new_id는 아래와 같이 변경됩니다. 1단계 대문자 'B'와 'T'가 소문자 'b'와 't'로 바뀌었습니다. "...!@BaT#*..y.abcdefghijklm" → "...!@bat#*..y.abcdefghijklm" 2단계 '!', '@', '#', '*' 문자가 제거되었습니다. "...!@bat#*..y.abcdefghijklm" → "...bat..y.abcdefghijklm" 3단계 '...'와 '..' 가 '.'로 바뀌었습니다. "...bat..y.abcdefghijklm" → ".bat.y.abcdefghijklm" 4단계 아이디의 처음에 위치한 '.'가 제거되었습니다. "...
-
최소직사각형프로그래머스(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++프로그래머스(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에 삽입합니다.
-
프로그래머스 - 탑 C++프로그래머스(Programmers) 2020. 7. 11. 14:21
문제 설명 수평 직선에 탑 N대를 세웠습니다. 모든 탑의 꼭대기에는 신호를 송/수신하는 장치를 설치했습니다. 발사한 신호는 신호를 보낸 탑보다 높은 탑에서만 수신합니다. 또한, 한 번 수신된 신호는 다른 탑으로 송신되지 않습니다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 탑이 왼쪽으로 동시에 레이저 신호를 발사합니다. 그러면, 탑은 다음과 같이 신호를 주고받습니다. 높이가 4인 다섯 번째 탑에서 발사한 신호는 높이가 7인 네 번째 탑이 수신하고, 높이가 7인 네 번째 탑의 신호는 높이가 9인 두 번째 탑이, 높이가 5인 세 번째 탑의 신호도 높이가 9인 두 번째 탑이 수신합니다. 높이가 9인 두 번째 탑과 높이가 6인 첫 번째 탑이 보낸 레이저 신호는 어떤 탑에서도 수신할 수 없습니다. 맨 왼쪽..