알고리즘(51)
-
프로그래머스 소수찾기 C++
문제는 먼저 numbers 가지고 만들 수 있는 모든 숫자들을 만들고, 만든 다음에 소수인지 확인하면 된다. numbers가지고 만들 수 있는 모든 숫자들을 어떻게 만들 수 있을까? c++ 에 정의되어 있는 next_permutation 함수를 사용했다 #include #include #include #include #include #include using namespace std; unordered_map m; bool isPrime(int x) { if (x == 0 || x == 1) { return false; } if (x == 2) { return true; } for (int i = 2; i first)) { answer++; } } cout
2023.10.19 -
프로그래머스 최소직사각형 C++
#include #include #include using namespace std; int solution(vector sizes) { int answer = 0; int height=0, width=0; for (int i=0;i sizes[i][1]){ height = max(height, sizes[i][0]); width = max(width, sizes[i][1]); } else{ height = max(height, sizes[i][1]); width = max(width, sizes[i][0]); } } answer = height * width; return answer; } 문제는 완전탐색 문제이다. 결국, 최소 직사각형을 구하면 한쪽에 max값을 두고 다른쪽에 나머지를 두는 것이 가장..
2023.10.19 -
프로그래머스 H-Index C++
이 문제는 이해하기가 어려운 문제였다. 코드는 간단하다. 문제에서 나온 예시를 정렬하면 0,1, 3, 5, 6이 된다. 이 때 인덱스 번호는 자신 이상으로 인용된 횟수를 확인할 수 있다. 가령 6의 경우 인덱스 번호는 1이고 (역으로 정렬했다) 따라서 자신 이상으로 인용된 횟수는 1회이다. 디버깅 케이스는 10, 20, 30과 같은 경우이다. 이 때 10회이상 인용이 되었지만 쓴 논문이 3편이기 때문에 h index의 최대값은 3편에 지나지 않는다. 이에 유의해서 풀면 된다. #include #include #include using namespace std; int solution(vector citations) { int answer = 0; sort(citations.begin(), citation..
2023.10.19 -
프로그래머스 K번째 수 C++
구현 문제이다. 배열을 부분 배열로 자르고, 정렬한다음에 k번째 수를 리턴하면 된다. 간단하다 시간 제약도 없어서 따로 알고리즘을 쓸 필요가 없다. #include #include #include using namespace std; vector solution(vector array, vector commands) { vector answer; for (int i=0;i
2023.10.19 -
프로그래머스 여행경로 C++
dfs로 탐색해서 풀면 되는 문제이다. 내가 작성한 코드는 아래와 같다. #include #include #include #include using namespace std; vector Tickets; vector Answer; int visited[10001]; int should_end; void dfs(string s, int count){ if (count == Tickets.size()){ should_end = 1; } else{ for (int i=0;i
2023.10.19 -
코드트리 메이즈 러너 C++
구현 문제이다. 앞선 포스트에서 삼성 코테에서 좌표 회전이 많이 나온 것 같다는 글을 썼다. 이 문제 역시 좌표 회전을 포함한 문제였다. 이런 유형을 몇문제 풀어보니 대충 좌표의 규칙을 확인해서 풀면 되는 것 같다. 다행히 규칙이 여태까지 본 문제 중에서 크게 어려운 문제는 없었다. 이 문제의 경우, (i, j) -> (j, n-i-1) 을 만족함을 생각해서 풀어야한다. 이 문제의 특이한 부분은, '최단경로' 문제임에도 불구하고 dfs나 bfs로 푸는 문제가 아니라는 점이다. 어차피 한칸만 이동이 가능하고, 이동해야하는 방향성도 명확하다. 따라서 매번 상하 -> 좌우 순으로 이동이 가능한지 확인하고 이동 가능하다면 이동을 시켜주면 된다. 테스트케이스 2번에서 에러가 나서 디버깅하는 시간이 조금 오래 걸렸..
2023.10.14