티스토리 뷰

반응형

 

문제

5*5 격자판에 아래롸 같이 숫자가 적혀있습니다.

N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가 장 큰 합을 출력합니다.

 

입력

첫 줄에 자연수 N이 주어진다.(2<=N<=50)

 

출력

최대합을 출력합니다.

 

 

 

예시 입력

5
10 13 10 12 15
12 39 30 23 11
11 25 50 53 15
19 27 29 37 27
19 13 30 13 19

예시 출력

155

 

 

 

 

 

문제 풀이

 

[첫번째 풀이]

import java.util.Scanner;
  
public class Main {
  public int solution(int count, int[][] n) {
    int max = 0, sum = 0;

    for (int i=0; i<count; i++) {
      // 행
      sum = 0;
      for (int j=0; j<count; j++) sum += n[i][j];
      if (max < sum) max = sum;

      // 열
      sum = 0;
      for (int j=0; j<count; j++) sum += n[j][i];
      if (max < sum) max = sum;
    }

    // 정대각선
    sum = 0;
    for (int i=0; i<count; i++) sum += n[i][i];
    if (max < sum) max = sum;

    // 반대각선
    sum = 0;
    for (int i=0; i<count; i++) {
      sum += n[count - 1][i];
      count--;
    }
    if (max < sum) max = sum;

    return max;
  }
  
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    int count = scanner.nextInt();
    int[][] n = new int[count][count];
    for (int i=0; i<count; i++) {
      for (int j=0; j<count; j++) {
        n[i][j] = scanner.nextInt();
      }
    }

    Main main = new Main();
    System.out.println(main.solution(count, n));
  }
}

(Time 207ms / Memory 31MB)

 

[두번째 풀이]

import java.util.Scanner;
  
public class Main {
  public int solution(int count, int[][] n) {
    int max = 0, diagonal1 = 0, diagonal2 = 0;
    int c = count;

    for (int i=0; i<count; i++) {
      int row = 0, column = 0;
      for (int j=0; j<count; j++) {
        row += n[i][j];
        column += n[j][i];
      }
      if (max < row) max = row;
      if (max < column) max = column;

      diagonal1 += n[i][i];
      diagonal2 += n[c - 1][i];
      c--;
    }

    if (max < diagonal1) max = diagonal1;
    if (max < diagonal2) max = diagonal2;

    return max;
  }
  
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    int count = scanner.nextInt();
    int[][] n = new int[count][count];
    for (int i=0; i<count; i++) {
      for (int j=0; j<count; j++) {
        n[i][j] = scanner.nextInt();
      }
    }

    Main main = new Main();
    System.out.println(main.solution(count, n));
  }
}

(Time 210ms / Memory 31MB)

 

[세번째 풀이]

import java.util.*;
  
public class Main {
  public int solution(int count, int[][] n) {
    int max = 0, diagonal1 = 0, diagonal2 = 0;
    int c = count;

    for (int i=0; i<count; i++) {
      int row = 0, column = 0;
      for (int j=0; j<count; j++) {
        row += n[i][j];
        column += n[j][i];
      }
      max = Math.max(max, row);
      max = Math.max(max, column);

      diagonal1 += n[i][i];
      diagonal2 += n[c - 1][i];
      c--;
    }

    max = Math.max(max, diagonal1);
    max = Math.max(max, diagonal2);

    return max;
  }
  
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    int count = scanner.nextInt();
    int[][] n = new int[count][count];
    for (int i=0; i<count; i++) {
      for (int j=0; j<count; j++) {
        n[i][j] = scanner.nextInt();
      }
    }

    Main main = new Main();
    System.out.println(main.solution(count, n));
  }
}

(Time 237ms / Memory 31MB)

 

 

 

- 어떻게든 더 간단하게 풀 수 있는 방법이 없나 했는데 풀이 영상도 같은 방식으로 코드를 짜고 있었다. 다만 세번째 풀이의 다른 점은 최대값을 구할 때 Math.max()를 이용한다는 점이다.

 

 

 

 

 

반응형

'Java > Coding Test' 카테고리의 다른 글

[코딩테스트] 임시반장 정하기  (0) 2022.03.11
[코딩테스트] 봉우리  (0) 2022.03.10
[코딩테스트] 등수구하기  (0) 2022.03.10
[코딩테스트] 점수계산  (0) 2022.03.08
[코딩테스트] 뒤집은 소수  (0) 2022.03.08
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함