UL :)
UL의 개발 블로그
UL :)
전체 방문자
오늘
어제
  • 분류 전체보기 (220)
    • 일상 (1)
    • 회고록 (7)
    • ChatGPT 아카이빙 (0)
    • PS(Java) (114)
      • 백준 (37)
      • 인프런 강의 문제 (77)
    • Web (69)
      • Spring (18)
      • JPA (7)
      • JSP (9)
      • HTML5 (12)
      • CSS (19)
      • HTTP (0)
      • 보안 (2)
    • Language (5)
      • Java (3)
      • JS (1)
      • Python (1)
    • Git, GitHub (4)
    • Settings (18)
      • IntelliJ (7)
      • Eclipse (2)
      • VSCode (3)
      • Android Studio (1)
      • VMware (2)
      • Mac (0)
    • Etc (1)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 백준
  • ReturnValueHandler
  • ORM
  • TABLE 전략
  • @ManyToOne
  • 동일성보장
  • argumentresolver
  • SEQUENCE 전략
  • consumes
  • @Table
  • 영속성
  • @Id
  • @GetMapping
  • @Column
  • ViewName반환
  • 요청헤더
  • IDENTITY 전략
  • HandlerMethodArgumentResolver
  • HttpMessageConverter
  • BOJ
  • @RequestParam
  • JPA
  • 엔티티 매핑
  • 정렬
  • @JoinColumn
  • 영속성컨텍스트
  • 1차 캐시
  • produces
  • @PostMapping
  • EntityManagerFactory

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
UL :)

UL의 개발 블로그

[PS] 인프런 강의 - Array 9. 격자판 최대합
PS(Java)/인프런 강의 문제

[PS] 인프런 강의 - Array 9. 격자판 최대합

2022. 10. 18. 14:08

 

문제

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

 


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

 

▣ 입력설명
첫 줄에 자연수 N이 주어진다.(2<=N<=50)
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는다.

 

▣ 출력설명
최대합을 출력합니다.

 

▣ 입력예제 1
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

 

▣ 출력예제 1
155

 

풀이

나는 입력받는 for문을 돔과 동시에 행의 최대값, 우상향 대각선의 합을 구하고 (이중 for문)

두번째 for문에서는 열의 최대값, 우하향 대각선의 합을 구한뒤 (이중 for문)

최대값과 비교해서 가장 큰값을 출력하는 식으로 풀었는데

 

강사님은 일단 값을 입력받은 뒤(for문)  따로 행,열의 합 최대값을 구하고 (이중 for문)

그 다음 대각선 두개의 합을 구한 뒤 (for문)

최대값과 비교하는 식으로 푸셨다.

 

코드

1) 내가 푼 풀이 : 

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		int n = in.nextInt();
		int[][] board = new int[n][n];
		
		int max = 0;
		int diagSum1 = 0;
		for(int i=0; i<n; i++) {
			int rowSum = 0;
			
			for(int j=0; j<n; j++) {
				board[i][j] = in.nextInt();
				rowSum += board[i][j]; //행의 합
				if(i==j) diagSum1 += board[i][j]; //우상향 대각선 합
			}
			if(rowSum > max) max = rowSum; //행의 최대값
		}
		
		int diagSum2 = 0;
		for(int j=0; j<n; j++) {
			int colSum = 0;
			
			for(int i=0; i<n; i++) {
				colSum += board[i][j]; //열의 합
				if(i==j) diagSum2 += board[i][j]; //우하향 대각선 합
			}
			if(colSum > max) max = colSum;
		}
		diagSum1 = Math.max(diagSum1, diagSum2);
		max = Math.max(max, diagSum1);
		
		System.out.print(max);

	}
}

 

2) 강사님 풀이

import java.util.*;
class Main {	
	public int solution(int n, int[][] arr){
		int answer=-2147000000;
		int sum1=0, sum2=0;
		for(int i=0; i<n; i++){
			sum1=sum2=0;
			for(int j=0; j<n; j++){
				sum1+=arr[i][j];
				sum2+=arr[j][i];
			}
			answer=Math.max(answer, sum1);
			answer=Math.max(answer, sum2);
		}
		sum1=sum2=0;
		for(int i=0; i<n; i++){
			sum1+=arr[i][i];
			sum2+=arr[i][n-i-1];
		}
		answer=Math.max(answer, sum1);
		answer=Math.max(answer, sum2);
		return answer;
	}

	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n=kb.nextInt();
		int[][] arr=new int[n][n];
		for(int i=0; i<n; i++){
			for(int j=0; j<n; j++){
				arr[i][j]=kb.nextInt();
			}
		}
		System.out.print(T.solution(n, arr));
	}
}
저작자표시 비영리 변경금지 (새창열림)

'PS(Java) > 인프런 강의 문제' 카테고리의 다른 글

[PS] 인프런 강의 - Array 11. 임시반장 정하기  (0) 2022.10.20
[PS] 인프런 강의 - Array 10. 봉우리  (0) 2022.10.20
[PS] 인프런 강의 - Array 8. 등수구하기  (0) 2022.10.18
[PS] 인프런 강의 - Array 7. 점수계산  (0) 2022.10.18
[PS] 인프런 강의 - Array 6. 뒤집은 소수  (0) 2022.10.18
    'PS(Java)/인프런 강의 문제' 카테고리의 다른 글
    • [PS] 인프런 강의 - Array 11. 임시반장 정하기
    • [PS] 인프런 강의 - Array 10. 봉우리
    • [PS] 인프런 강의 - Array 8. 등수구하기
    • [PS] 인프런 강의 - Array 7. 점수계산
    UL :)
    UL :)
    백엔드 개발자를 목표로 달리고 있습니다🔥

    티스토리툴바