728x90
✔️ 문제 설명

[문제 바로 가기]
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
✔️ 문제 풀이
이 문제를 풀 때,
1. 각 행 / 각 열 / 대각선 "\" / 대각선 "/" 합을 어떻게 저장할까?
2. 꼭 입력값들을 배열에 저장해야할까? 바로바로 합을 구하는 방법은 없을까..?
이 두가지 고민을 한 후, 입력 받을 때 마다 위치에 따라서 합을 더하자!! 라는 결론이 났다.
내가 생각해낸 방식은 아래와 같다.
5x5 배열의 경우, 행과 열의 합인 10과 대각선 두 개로 총 12개의 합을 저장해야한다.
그림으로 이해하면 쉽다.

정리하자면,
각 행의 합은 배열 sum의 앞에서 부터 저장하고,
각 열의 합은 배열 sum의 뒤에서 부터 저장한다.
그리고 각 대각선의 합도 저장해야되니, 총 행과 열의 합인 200 + 대각선 두 개 = 총 202개의 합을 저장해야된다.
for(int j = 0; j< 100; j++){
st = new StringTokenizer(br.readLine());
for(int k = 0; k<100; k++){
int num = Integer.parseInt(st.nextToken());
sum[j] += num; //각 행
sum[200-k] += num; //각 열
if(j == k) sum[100] += num; // 대각선 " \ "
if( j +k == 99) sum[201] += num; // 대각선 " / "
}
}
최대값은 하나하나 비교할 수 있지만, 그냥 Arrays의 sort 함수를 쓴 후 마지막 인덱스 값을 뽑아냈다.
Arrays.sort(sum);
System.out.printf("#%d %d\n", i+1, sum[201]);
[실행 결과]

[코드]
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
import java.util.Arrays;
class Solution
{
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int[] sum = new int[202];
for(int i = 0; i < 10; i++){
br.readLine(); //테스트케이스 번호 읽기
Arrays.fill(sum, 0); //배열 0으로 초기화
for(int j = 0; j< 100; j++){
st = new StringTokenizer(br.readLine());
for(int k = 0; k<100; k++){
int num = Integer.parseInt(st.nextToken());
sum[j] += num; //각 행
sum[200-k] += num; //각 열
if(j == k) sum[100] += num; // 대각선 " \ "
if( j +k == 99) sum[201] += num; // 대각선 " / "
}
}
Arrays.sort(sum);
System.out.printf("#%d %d\n", i+1, sum[201]);
}
}
}
728x90
'Coding Test > SWEA 풀이' 카테고리의 다른 글
[SWEA] 1208. [S/W 문제해결 기본] 1일차 - Flatten : D3 (java) (2) | 2024.11.15 |
---|---|
[SWEA] 1206. [S/W 문제해결 기본] 1일차 - View : D3 (java) (0) | 2024.11.15 |
[SWEA] 1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 : D2 (java) (1) | 2024.11.14 |