-
#1209. [S/W 문제해결 기본] 2일차 - sumCode/swea 2019. 12. 25. 23:18728x90반응형
출처: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13_BWKACUCFAYh
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문제 요약 및 핵심
2차원 배열이 주어질 때, 각 행의 합, 각 열의 합, 각 대각선의 합 중 최댓값을 구하는 프로그램을 작성해야한다.
문제는 어려운 편이 아니었지만 처음에는 각 행의 합, 열의 합, 대각선의 합을 구하는 함수를 따로따로 만들어서 max값을 뽑아냈었다. 그런데 여기서 조금 더 줄여 단한번의 이중for문 ( 2차원 배열 1회 탐색) 만으로 각 행의 합, 열의 합, 대각선의 합을 다 할 수 있는 방법을 생각해내었다.
먼저 행의 합을 저장하는 1차원배열과 마찬가지로 열과 대각선을 저장하는 1차원배열 총 3개를 만들었다.
행 우선 순회 탐색으로 인덱스 i,j를 주어 순회를 하면서 행의 합, 열의 합, 대각선의 합 배열을 계속해서 갱신한 후 이 배열의 요소중 가장 큰 값을 출력하였다.
소스코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters// #s 1209 sum #include <iostream> #include <cstring> using namespace std; #define n 100 int arr[n][n]; int main() { for (int t = 1; t <= 10; t++) { int tt; cin >> tt; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> arr[i][j]; } } int maxx = 0; int hang[101]; int yeol[101]; int dae[2]; memset(hang, 0, sizeof(hang)); memset(yeol, 0, sizeof(yeol)); memset(dae, 0, sizeof(dae)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { hang[i] += arr[i][j]; yeol[j] += arr[i][j]; if (i == j) { dae[0] += arr[i][j]; } else if (i + j == 99) { dae[1] += arr[i][j]; } } } maxx = dae[0] > dae[1] ? dae[0] : dae[1]; for (int i = 0; i < n; i++) { if (maxx < hang[i])maxx = hang[i]; if (maxx < yeol[i])maxx = yeol[i]; } cout << "#" << t << " " << maxx << endl; } } 728x90반응형'Code > swea' 카테고리의 다른 글
#1220. [S/W 문제해결 기본] 5일차 - Magnetic (0) 2020.03.12 #2383. [모의 SW 역량테스트] 점심 식사시간 (0) 2020.02.09 #5644. [모의 SW 역량테스트] 무선 충전 (0) 2020.01.03 #3752. 가능한 시험 점수 (0) 2019.12.31 #1225. [S/W 문제해결 기본] 7일차 - 암호생성기 (0) 2019.12.25