목록프로그래머스 알고리즘/2단계 (62)
N

우선 처음에 answer에는 [0, 0]을 넣어주도록 하자. 만약 모든 단어가 규칙에 맞게 끝말잇기를 했다면 [0, 0]을 바로 리턴하기 위함이다. 그리고 첫 단어는 check에 넣어주었다. 이제 1번째 인덱스의 단어부터 끝까지 단어를 탐색하도록 한다. turn과 count 는 선언 시 1로 초기화 하였기 때문에, 순서에 맞게 +1 씩 해주면 된다. for문 설명) 우선 turn++을 하여 차례를 세도록 한다. 그리고 words[i]의 첫 번째 글자와 words[i - 1]의 마지막 글자가 일치하는지 검사한다. 일치하지 않으면 바로 break를 하여 빠져나오고, 일치한다면 check 벡터에 단어가 있는지 검사한다. 만약 check 벡터에 단어가 없으면 check에 넣어주도록 한다. 단, 마지막 단어일 때..

주어진 배열에서 3개의 수를 더했을 때 소수인지 판별하면 된다..! 우선 1000 이하의 자연수이고, 3개의 수를 더해야 하기 때문에 구할 수 있는 소수의 최댓값은 1000 + 999 + 998이다. 2997이므로 소수를 판별하는 배열 prime[2998]을 선언하여 false로 초기화해준다. (소수 판별하는 for문의 설명) https://eunchanee.tistory.com/18 (프로그래머스 c++)소수 찾기 소수 찾는 기본적인 문제..! 종종 알고리즘 문제를 풀다보면 나오는 것 같다..! 그래서 풀이 형태를 외워두는 게 나을 것 같다..! 전역 변수로 1000001 크기의 bool 형태 배열을 선언해준다. 2부터 n까� eunchanee.tistory.com 그리고 nums를 오름차순으로 정렬해..

bitset을 이용하여 문제를 풀었다..! bitset은 int형 n을 bit 형태로 만들어 주기 때문에 이 문제에 적용하기 좋다..! 우선 1의 개수를 알아야 하기 때문에 count 변수에 n의 1의 개수를 넣어준다. 그리고 answer에는 n + 1을 넣어주고, n + 1을 bit로 바꾸었을 때 1의 개수가 count와 같은 것이 나올 때까지 answer++을 해주면 쉽게 구할 수 있다. #include #include #include using namespace std; int solution(int n) { int answer = n + 1; int count = bitset(n).count(); while(bitset(answer).count() != count) answer++; return ..

DP를 이용하여 문제를 풀었다..! 우선 열의 개수는 무조건 4개이다. 시간은 충분할 것 같다..! 3중 for문을 이용하도록 하자. i = 1부터 시작하여, i - 1 행의 수를 모두 비교해야 한다. 단, j != k여야 같은 열 번호의 수를 선택하지 않는다. m은 현재 행의 위치에서 이전 행의 각 열을 더했을 때 가장 큰 값을 저장하는 변수이다. 그리고 이전의 최댓값이 누적이 되므로 마지막 행에서 최댓값만 찾으면 된다..! #include #include #include using namespace std; int solution(vector land) { int answer = 0, m = 0; for(int i = 1; i < land.size(); i++) { for(int j = 0; j < ..

문제는 길지만 막상 풀어보면 쉬운 문제다..! 우선 max = 가져갈 수 있는 폰켓몬의 수이므로 nums.size() / 2를 넣어준다. 그리고 같은 종류는 가져가지 않도록 check[200001] = {false, }로 하여 체크하도록 한다. for문으로 answer == max 일 때까지 반복한다. 만약 check[nums[i]] == false라면 처음 가져가는 폰켓몬의 종류이므로 answer++을 해주고, 해당하는 종류 번호를 true로 바꿔주면 끝..! #include #include using namespace std; int solution(vector nums) { int answer = 0, max = nums.size() / 2; bool check[200001] = {false, };..

연속된 숫자들의 합이 n과 같으면 answer++을 해주면 된다..! 우선 start = 1 을 선언해준다. start로 연속된 숫자의 시작을 알 수 있도록 하기 위함이다. 이제 while문으로 start

문자열로 들어온 값 중에서 최댓값과 최솟값을 찾아야 한다. 우선 문자열을 int 형태로 바꿔줘야 한다. 그리고 공백 문자를 제외하고 숫자만 가져와야 하기 때문에 token을 이용하여 문자열을 나누었다. for문이 token을 이용하여 공백을 제외하고 숫자만 받아와 int 형태로 v벡터에 넣어주고 있는 부분이다. 모든 숫자를 가져왔으면 sort()를 통해 오름차순으로 정렬을 해준다. 그러면 v.front()는 최솟값, v.back()은 최댓값이 되므로 to_string()으로 int를 string형태로 바꿔주고 알맞게 answer에 넣어주면 끝..! #include #include #include #include #include using namespace std; string solution(string..

벡터를 정렬하여 최솟값을 만드는 문제..! 우선 A와 B 벡터를 오름차순과 내림차순으로 정렬한다. 내림차순으로 정렬할 때에는 desc() 함수를 이용하도록 하였다. 그리고 각각의 자리에 있는 값을 곱하여 answer에 누적시키면 끝..! 추가적으로 sort()를 내림차순으로 만들 때, sort(B.rbegin(), B.rend())를 사용하여도 된다! rbegin()과 rend()는 역방향 반복자다..! #include #include #include using namespace std; bool desc(int a, int b) { return a > b; } int solution(vector A, vector B) { int answer = 0; sort(A.begin(), A.end()); sor..