{ }codelper
2차원 목록겹친 반복P0033

가로 합과 세로 합

첫 줄에 줄 수 r과 칸 수 c가 주어지고, 이어서 r줄에 걸쳐 한 줄에 정수 c개씩 주어진다.
첫째 줄에는 각 줄(가로)의 합 r개를 위에서부터, 둘째 줄에는 각 칸(세로)의 합 c개를 왼쪽부터 빈칸 하나로 띄워 출력하라.

입력
1 ≤ r, c ≤ 50, -1000 ≤ 각 정수 ≤ 1000
출력
두 줄: 가로 합 r개, 세로 합 c개
예시 1 · stdin
2 3
1 2 3
4 5 6
stdout
6 15
5 7 9
main.py
입력(stdin)

실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).

$ 준비됐어요

코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.

다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이

가로 합은 줄 하나를 더하면 되지만, 세로 합은 바깥 반복이 칸(j), 안쪽 반복이 줄(i)이에요.
r과 c를 바꿔 쓰면 정사각형일 때만 맞으니 2×3 같은 직사각형으로 꼭 시험해요.
2차원 목록 만들기: Python은 [[0] * c] * r이 같은 줄 하나를 r번 가리키는 함정이 있어 [[0] * c for _ in range(r)]로 써요.
C는 int g[50][50], C++ vector<vector<int>>, C#은 int[,](칸은 g[i, j])와 int[][] 두 가지, Java는 int[r][c].
크레이콘은 grid.넣기(콘솔.수들읽기())로 줄을 하나씩 넣고 grid[i][j]로 읽어요.

Pythonmain.py · 6 줄
r, c = map(int, input().split())grid = [list(map(int, input().split())) for _ in range(r)]row_sums = [sum(row) for row in grid]col_sums = [sum(grid[i][j] for i in range(r)) for j in range(c)]print(*row_sums)print(*col_sums)
JavaScriptmain.js · 10 줄
const lines = require("fs").readFileSync(0, "utf8").trim().split("\n");const [r, c] = lines[0].trim().split(/\s+/).map(Number);const grid = lines.slice(1, r + 1).map((line) => line.trim().split(/\s+/).map(Number));const rowSums = grid.map((row) => row.reduce((s, x) => s + x, 0));const colSums = new Array(c).fill(0);for (let i = 0; i < r; i++) {  for (let j = 0; j < c; j++) colSums[j] += grid[i][j];}console.log(rowSums.join(" "));console.log(colSums.join(" "));
TypeScriptmain.ts · 11 줄
import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").trim().split("\n");const [r, c]: number[] = lines[0].trim().split(/\s+/).map(Number);const grid: number[][] = lines.slice(1, r + 1).map((line) => line.trim().split(/\s+/).map(Number));const rowSums: number[] = grid.map((row) => row.reduce((s, x) => s + x, 0));const colSums: number[] = new Array<number>(c).fill(0);for (let i = 0; i < r; i++) {  for (let j = 0; j < c; j++) colSums[j] += grid[i][j];}console.log(rowSums.join(" "));console.log(colSums.join(" "));
JavaMain.java · 24 줄
import java.util.Scanner;import java.util.StringJoiner; public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int r = sc.nextInt(), c = sc.nextInt();        int[] rowSums = new int[r];        int[] colSums = new int[c];        for (int i = 0; i < r; i++) {            for (int j = 0; j < c; j++) {                int x = sc.nextInt();                rowSums[i] += x;                colSums[j] += x;            }        }        StringJoiner rows = new StringJoiner(" ");        for (int s : rowSums) rows.add(String.valueOf(s));        StringJoiner cols = new StringJoiner(" ");        for (int s : colSums) cols.add(String.valueOf(s));        System.out.println(rows);        System.out.println(cols);    }}
C#Main.cs · 21 줄
using System;using System.Linq; class Program{    static void Main()    {        int[] rc = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();        int r = rc[0], c = rc[1];        int[,] grid = new int[r, c];        for (int i = 0; i < r; i++)        {            int[] row = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();            for (int j = 0; j < c; j++) grid[i, j] = row[j];        }        var rowSums = Enumerable.Range(0, r).Select(i => Enumerable.Range(0, c).Sum(j => grid[i, j]));        var colSums = Enumerable.Range(0, c).Select(j => Enumerable.Range(0, r).Sum(i => grid[i, j]));        Console.WriteLine(string.Join(" ", rowSums));        Console.WriteLine(string.Join(" ", colSums));    }}
C++main.cpp · 22 줄
#include <iostream>#include <vector> int main() {    int r, c;    std::cin >> r >> c;    std::vector<std::vector<int>> grid(r, std::vector<int>(c));    for (auto& row : grid)        for (int& x : row) std::cin >> x;    for (int i = 0; i < r; i++) {        int sum = 0;        for (int j = 0; j < c; j++) sum += grid[i][j];        std::cout << (i ? " " : "") << sum;    }    std::cout << "\n";    for (int j = 0; j < c; j++) {        int sum = 0;        for (int i = 0; i < r; i++) sum += grid[i][j];        std::cout << (j ? " " : "") << sum;    }    std::cout << "\n";}
Cmain.c · 21 줄
#include <stdio.h> int main(void) {    int r, c, grid[50][50];    scanf("%d %d", &r, &c);    for (int i = 0; i < r; i++)        for (int j = 0; j < c; j++) scanf("%d", &grid[i][j]);    for (int i = 0; i < r; i++) {        int sum = 0;        for (int j = 0; j < c; j++) sum += grid[i][j];        printf(i ? " %d" : "%d", sum);    }    putchar('\n');    for (int j = 0; j < c; j++) {        int sum = 0;        for (int i = 0; i < r; i++) sum += grid[i][j];        printf(j ? " %d" : "%d", sum);    }    putchar('\n');    return 0;}
Craykonmain.cray · 30 줄
rc = 콘솔.수들읽기();r = rc[0];c = rc[1];grid = [];반복 (i = 0; i < r; i++){    grid.넣기(콘솔.수들읽기());}rowSums = [];반복 (i = 0; i < r; i++){    sum = 0;    반복 (j = 0; j < c; j++)    {        sum += grid[i][j];    }    rowSums.넣기(sum);}colSums = [];반복 (j = 0; j < c; j++){    sum = 0;    반복 (i = 0; i < r; i++)    {        sum += grid[i][j];    }    colSums.넣기(sum);}콘솔.쓰기(rowSums);콘솔.쓰기(colSums);