행 번호 다음에 열 번호를 써요
vector·조건·반복을 알고 시작해요. vector<vector<int>>는 각 행을 vector로 담는 격자예요.
vector<vector<int>> grid = {{2, 5, 1}, {4, 0, 3}};
grid[0]은 첫 행 {2,5,1}이고, grid[0][1]은 그 행의 두 번째 값 5예요. grid.size()는 행 수 2, grid[0].size()는 첫 행의 열 수 3이에요. 이 레슨의 격자는 모든 행의 길이가 같아요.
행이 바뀌면 행 합도 새로 시작해요
행마다 열을 순회하는 중첩 반복을 써요.
for (int r = 0; r < grid.size(); r++) {
int rowTotal = 0;
for (int c = 0; c < grid[r].size(); c++) {
rowTotal = rowTotal + grid[r][c];
}
// 이 시점의 rowTotal은 r행 전체의 합이에요.
}
첫 행은 2→7→8, 둘째 행은 4→4→7로 합이 변해요. 둘째 행 첫 값을 처리하기 전 rowTotal은 얼마일까요? 0이에요. 행 안의 합과 전체 최댓값은 서로 다른 상태로 보관해요.
음수도 후보에 포함해요
행 합이 −6과 −2라면 최대 행 합은 −2예요. 최댓값을 0에서 시작하면 실제로 없는 행을 후보로 넣는 셈이에요.
첫 행의 합을 첫 후보로 삼거나, 모든 가능한 행 합보다 작은 값에서 시작해요. 이 과제는 각 행에 적어도 한 칸이 있어요. 행 수×열 수가 아니라 각 행의 값을 더한다는 의미를 유지해요.
직접 풀어봐요
격자 grid의 각 행에 적힌 정수를 모두 더하고, 그 행 합들 중 최댓값을 반환해요. 행을 고르는 문제이며 열 합은 비교하지 않아요.
행 수와 열 수는 각각 1100, 모든 행의 길이는 같아요. 각 원소는 −10001000이에요. 실행용 입력은 첫 줄 rows cols, 다음 rows줄에 각 행의 cols개 정수예요. 출력은 반환값이에요. 하네스가 입력·출력을 처리해요.
예시 1: {{3,1},{2,5},{4,0}} → 7. 행 합은 4, 7, 4예요.
예시 2: {{-2,1},{0,4}} → 4. 행 합은 −1, 4예요.
예시 입력
3 2 3 1 2 5 4 0
예상 결과
7
예시 입력
2 2 -2 1 0 4
예상 결과
4
핵심 개념
array-2d: grid[r][c]는 r행 c열이에요. 행마다 누적값을 새로 만들고, 행 사이에서 비교할 최댓값은 따로 유지해요.