728x90
728x90
풀이
그냥 구현문제인가 ? 생각하고 마름모를 반으로 잘라 윗 삼각형은 1,3,5 .. .이렇게 더해주고 나머지 반은 5,3,1 ... 이렇게 더해주었다. 나름 빨리 풀었는데 코드가 더러워 다른 분들 코드를 봤는데 "마름모 별 찍기?" 와 똑같이 구해주는 분을 보았다. .. 왜 ,,? 그걸 ,,,난 몰랐을까,,다시 짜러가보쟈 ..
첫번째 풀이
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int arr[50][50] = { 0, }; // 농장의 크기
int main() {
int test_case= 0;
cin >> test_case;
for (int i = 0; i < test_case; i++) {
int ans = 0; // 정답 출력
int num;
cin >> num;
for (int j = 0; j <num; j++) { // 초기화
string tmp;
cin >> tmp;
for (int k = 0; k < tmp.size(); k++) {
arr[j][k] = tmp[k] - '0';
}
}
int a = 1;
int flag = num / 2; // 2
for (int h = 0; h <= num/2; h++) { // 커지는 구간
for (int g = 0; g < a; g++) {
ans += arr[h][flag + g];
}
flag--;
a += 2;
}
a -= 4;
flag += 2;
for (int h = num / 2 + 1; h < num; h++) { // 작아지는 구간
for (int g = 0; g < a; g++) {
ans += arr[h][flag + g];
}
flag++;
a -= 2;
}
cout << "#" << i + 1 << " " << ans << endl;
memset(arr, 0, sizeof(arr));
}
return 0;
}
두번째 풀이 : 마름모 별찍기 이용
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int arr[50][50] = { 0, }; // 농장의 크기
int main() {
int test_case= 0;
cin >> test_case;
for (int i = 0; i < test_case; i++) {
int ans = 0; // 정답 출력
int num;
cin >> num;
for (int j = 0; j <num; j++) { // 초기화
string tmp;
cin >> tmp;
for (int k = 0; k < tmp.size(); k++) {
arr[j][k] = tmp[k] - '0';
}
}
// 위 삼각형
for (int i = 0; i < num / 2; i++) {
for (int j = num / 2 - i; j <= num / 2 + i; j++) {
ans += arr[i][j];
}
}
// 아래 삼각형
for (int i = 0; i <= num / 2; i++) {
for (int j = i; j < num - i; j++) {
ans += arr[i + num / 2][j];
}
}
cout << "#" << i + 1 << " " << ans << endl;
memset(arr, 0, sizeof(arr));
}
return 0;
}
728x90
728x90
'Algorihtm > SWEA' 카테고리의 다른 글
C++ SWEA 1859. 백만 장자 프로젝트 (0) | 2023.11.03 |
---|---|
C++ SWEA 1225. [S/W 문제해결 기본] 7일차 - 암호생성기 (0) | 2023.11.03 |
C++ SWEA 3282. 0/1 Knapsack (0) | 2023.11.03 |
C++ SWEA 1208. [S/W 문제해결 기본] 1일차 - Flatten (0) | 2023.11.01 |
C++ SWEA 1206. [S/W 문제해결 기본] 1일차 - View (0) | 2023.11.01 |