Algorithm/SW Expert Academy
[SWEA] 1209. Sum
히욤이
2019. 4. 10. 23:27
SW Expert 1209. Sum
* 문제의 저작권은 SW Expert에 있습니다.
[문제 접근]
가로, 세로 , 대각선 각각 구한 후 arraylist에 넣어서 max로 최대값 구함
\ 대각선은 i,j가 같은 경우 더하기
/ 대각선의 좌표는 x,y 좌표의 합이 행 보다 하나 작다는 것을 알아냄
[코드]
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Solution_1209 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
for (int test_case = 1; test_case <= 10; test_case++) {
br.readLine();
int[][] map = new int[100][100];
for (int i = 0; i < 100; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < 100; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
ArrayList<Integer> list = new ArrayList<Integer>(); //합을 담을 리스트
int rdsum = 0; // \대각선 합
int ldsum = 0; // /대각선 합
for (int i = 0; i < 100; i++) {
int rowsum = 0; //가로 열 합
int colsum = 0; //세로 열 합
for (int j = 0; j < 100; j++) {
rowsum = rowsum +map[i][j];
colsum = colsum+ map[j][i];
if (i == j) {
rdsum = rdsum + map[i][j];
}
}
for (int j = map.length-1; j >= 0; j--) {
if (i+ j == map.length-1) {
ldsum = ldsum + map[i][j];
}
}
list.add(rowsum);
list.add(colsum);
}
list.add(rdsum);
list.add(ldsum);
int max = 0;
for (int i = 0; i < list.size(); i++) {
if (list.get(i)>max) {
max = list.get(i);
}
}
System.out.println("#"+test_case + " " + max);
}
}
}
<처음 풀었던 코드>
각 행 합의 값을 바로 max값과 비교해서 구함
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[][] arr = new int[100][100]; //2차원 배열
StringTokenizer st;
for (int test_case = 1; test_case <= 10; test_case++) {
br.readLine(); //test_case 읽어 줌
for (int i = 0; i < arr.length; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < arr.length; j++) {
arr[i][j] = Integer.parseInt(st.nextToken()); //배열에 값 삽입
}
}
int rowcnt; //가로 합
int colcnt; //세로 합
int dae1cnt = 0; // /대각선 합
int dae2cnt = 0; // \대각선 합
int max = 0; //최대값
for (int i = 0; i < arr.length; i++) { //배열크기 만큼 돌림
rowcnt = 0;
colcnt = 0;
for (int j = 0; j < arr.length; j++) {
if (i == j) { // \대각선의 합을 구하는 조건 : i,j가 같음
dae1cnt += arr[i][j]; // \대각선의 합
if (max<dae1cnt) { //max값과 비교
max = dae1cnt;
}
}
if (i+j == arr.length-1) {// /대각선의 합을 구하는 조건 : i+j는 배열 크기의 -1과 같음
dae2cnt += arr[i][j]; // /대각선의 합
if (max <dae2cnt) {
max = dae2cnt;
}
}
rowcnt += arr[i][j]; // 가로의 합
if (max<rowcnt) {
max = rowcnt;
}
colcnt += arr[j][i]; //세로의 합
if (max <colcnt) {
max = colcnt;
}
}
}
System.out.println("#" + test_case + " " + max);
}
}
}