Algorithm45 2477_참외밭 ▶ 실버2 풀이 입력은 항상 6번 주어지고, 전체 사각형 - 작은 사각형의 방식으로 면적을 구한다. 방향과 길이가 주어지는데, 두 번 주어지는 방향이 두 개이고 한 번 주어지는 방향이 두 개이다. 두 번 주어지는 방향에서 작은 사각형이 존재한다. ex) 7 4 50 2 160 3 30 1 60 3 20 1 100 전체 사각형: 50 * 160 작은 사각형: 60 * 20 전체 사각형은 한 번만 주어지는 방향의 길이를 곱하면 되고, 작은 사각형은 두 번 주어지는 방향 중 가운데 두 길이를 곱하면 된다. 따라서, 두 번 주어지는 방향과 한 번 주어지는 방향을 구분하고, 한 번 주어지는 방향 중 가운데 껴 있는 두 길이를 구한다. 코드 #include #include #include #include #incl.. 2023. 3. 12. 1339_단어 수학 ▶골드4 문제 풀이 이 문제는 문자 간의 우선순위를 정하는게 중요한 문제였다. 주어진 문자들 중에서 가장 큰 자릿수를 가진 문자가 가장 큰 수를 부여받고, 그 다음 큰 자릿수를 가진 문자가 그 다음 큰 수를 부여받고.... 이런 순으로 주어진 모든 문자에 숫자가 할당되면 이를 더하고 값을 출력한다. 처음에는 어렵게 생각해서 문자열이 긴 순으로 저장하고 문자를 할당하는 map을 따로 만들어서 할당 여부를 확인하고...뭐 이런식으로 진행했는데 너무 비효율적인 방법이었다. 자릿수를 생각하지 않아도 되도록 주어진 알파벳의 번호에 해당하는 인덱스 배열에 자릿수에 해당하는 값을 더한다. ex) ACDB -> 1320(거꾸로) -> alpha[0] = 1, alpha[2] = 10, alpha[3] = 100, al.. 2023. 3. 8. 1080_행렬 ▶실버1 문제 풀이 먼저 행렬 A와 B를 입력받고, 같은 위치에 있는 A와 B의 요소가 다른지 확인한다. 새로운 2차원 배열 C를 생성하고 두 수가 다르다면 1, 같다면 0을 C에 넣는다. C의 요소를 모두 탐색하면서 C의 요소가 1이라면 그 주변의 3 X 3 행렬을 모두 토글하고 다시 탐색한다. 전부 탐색을 했다면 C 행렬의 요소가 모두 0일 경우에만 정답을 출력하고, 나머지 경우에는 -1을 출력한다. 코드 #include #include #include #include #include #include #include #include using namespace std; string a[51]; string b[51]; //a와 b의 차이 유무를 나타내는 행렬 int c[51][51]; int main.. 2023. 3. 7. 1213_팰린드롬 만들기 ▶실버3 문제 풀이 생각해야할 것 1. I'm Sorry Hansoo가 출력될 조건 : 문자의 개수가 홀수인 문자가 두 개 이상일 경우 2. 사전 순으로 출력하는 방법 3. 절반 인덱스 지나면 반대로 출력하는 방법 먼저 문자의 개수를 세기 위해 배열을 선언하고 입력한 문자의 개수를 센다. for문으로 A부터 차례대로 탐색하는데, ① 해당 알파벳 개수가 존재하지 않는 경우, ② 알파벳 개수가 홀순데 처음 등장했을 경우, ③ 알파벳 개수가 홀순데 또 등장했을 경우, ④ 알파벳 개수가 짝수인 경우 로 나누어 진행한다. ① 해당 알파벳 개수가 존재하지 않는 경우 ☞ 다음 과정을 진행하지 않고 건너뛴다. ② 알파벳 개수가 홀순데 처음 등장했을 경우 ☞ 홀수 개 문자가 등장했다는 것을 불리언 값으로 나타내고, 정답.. 2023. 3. 5. 1965_상자넣기 ▶실버2 문제 풀이 전형적인 DP 문제. 가장 긴 증가하는 부분 수열 문제와 유사하다. 다음과 같은 형식으로 풀었다. 코드 #include #include #include #include #include #include using namespace std; int box[1001]; int dp[1001]; int main(void) { ios::sync_with_stdio(NULL); cin.tie(0); cout.tie(0); int n; cin >> n; for (int i = 0; i > box[i]; dp[i] = 1; } int ans = 1; for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if (box.. 2023. 3. 3. 1789_수들의 합 ▶실버1 문제 풀이 서로 다른 N개의 자연수의 합이 S라고 할 때, N의 값이 최대가 되기 위해서는 1부터 빼본다. S에서 1을 빼고, 2를 빼고, 3을 빼고 ... 계속 진행하다가 뺀 결과값이 이미 뺀 값이나 빼고 있는 값이라면 반복문을 종료하고 답을 낸다. ex) 20 - 1 19 - 2 17 - 3 14 - 4 10 - 5 = 5 (뺀 결과값이 현재 빼고 있는 값이므로 종료) => 20 = 1 + 2 + 3 + 4 + 10 (5개) ※ s값의 최댓값이 매우 크기 때문에 s가 int 형이 아닌 long long 형이어야 한다. 이거 때문에 에러났음... 코드 #include #include #include #include #include #include using namespace std; int m.. 2023. 3. 2. 이전 1 2 3 4 5 6 7 8 다음