알고리즘 풀이30 [Baekjoon] 1로 만들기 https://www.acmicpc.net/problem/1463 문제정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.X가 3으로 나누어 떨어지면, 3으로 나눈다.X가 2로 나누어 떨어지면, 2로 나눈다.1을 뺀다.정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.입력첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.출력첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.풀이점화식을 생각했지만 두 경우가 동시에 만족하는 경우를 생각하지 못했던 것 같다.dp[N] = dp[N-1] + 1 or dp[N/2] + 1 or dp[N/3]+1을 도출해냈는데 현재 수가 -1한 값이 최소인지 2로 나.. 2024. 8. 28. 단어 정렬 https://www.acmicpc.net/problem/1181 map을 사용했다. map은 키값을 오름차순 정렬으로 처리되기 때문에 채택했으며 길이가 같더라도 그대로 출력하면 그만이였다. 다만 이제 길이가 짧은 경우를 생각해야 했기 때문에 map 자체적으론 sort 함수를 사용할 수 없다. 그러므로 vector에 그대로 값을 넣어서 campare함수를 구현해야 했다. 길이가 같은 경우 그냥 true를 반환하려는데 이것이 에러를 표출해내었는데 이는 내부적으로 문제를 야기한다. 첫 번째로 어떤 순서로 둘지를 결정하는 것인데 이미 a가 b앞인 경우라면 true가 아닌 false가 와야한다..true 할 경우 내부적으로 위배되는 알고리즘을 반환하기 때문에 에러가 난 것.. #include #incl.. 2024. 8. 10. 좌표 정렬하기 https://www.acmicpc.net/problem/11650 기본으로 주어진 sort 함수에서 compare 함수를 따로 정의하여 풀었다. 처음엔 문제를 좀 대충 읽어서 이론상은 맞았는데 왜 안되지라는 막막함에 다시 읽어보니 x==y라는 전제가 있었다.. #include #include #include using namespace std;int main(){ int n; cin >> n; vector> arr; for (int i = 0; i > x >> y; arr.push_back({ x, y }); } sort(arr.begin(), arr.end(), [](pair a, pair b) { if (a.first == b.first) return a.second 2024. 8. 10. 수 정렬하기 3 https://www.acmicpc.net/problem/10989 계수 정렬을 이용해야 풀 수 있는 문제였다. 문제는 8mb까지 요구했기 때문에 시간복잡도와 공간복잡도를 처리해야하는 문제였다.. #include #include #include using namespace std;int main(){ int arr[10001] = { 0, }; int n; scanf("%d", &n); for (int i = 0; i 2024. 8. 10. 이전 1 2 3 4 ··· 8 다음