문제의 저작권은 SW Expert Academy에 있습니다. (출처)
1. 문제
1-1. 문제 설명
1-2. 문제 해석
2. 코드
3. 실행시간
1. 문제
1-1. 문제 설명
1-2. 문제 해석
해석을 딱히 적을 게 없는 문제이다. (...)
여러 방향으로 배열 탐색을 연습시키기 위해서 낸 문제인 듯하다.
가로 방향, 세로 방향, 대각선, 역대각선 이렇게 총 4개의 포문이 필요할 것 같지만
조금 생각해보면 가로/세로 방향, 대각/역대각선 이렇게 2번의 포문으로 해결할 수 있다.
2. 코드
public class Day2_1209_Sum {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
final int N = 100;
for (int tc = 1; tc <= 10; tc++) {
br.readLine();
int[][] arr = new int[N][N];
int max = Integer.MIN_VALUE;
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < N; j++) {
arr[i][j] = Integer.valueOf(st.nextToken());
}
}
int[] rowSum = new int[N];
for (int i = 0; i < N; i++) {
int sum = 0;
for (int j = 0; j < N; j++) {
sum += arr[i][j]; // 가로방향 합계
rowSum[j] += arr[i][j]; // 세로방향 합계
}
if(sum > max) max = sum; // 가로방향 합계의 최대값 구하기
}
for(int s : rowSum) {
if(s > max) max = s; // 세로방향 합계의 최대값 구하기
}
int diagonalSum = 0; // 대각선의 합
int revDiagonalSum = 0; // 역 대각선의 합
for(int i=0; i<N; i++) {
diagonalSum += arr[i][i];
revDiagonalSum += arr[i][N-1-i];
}
if(diagonalSum > max) max = diagonalSum;
if(revDiagonalSum > max) max = revDiagonalSum;
sb.append("#").append(tc).append(" ").append(max).append("\n");
}
System.out.println(sb.toString());
}
}
우선 시간 단축을 위해 BufferedReader와 StringTokenizer를 사용했다.
StringTokenizer에 대해서는 예전에 설명해둔 게시글이 있다.
rowSum 배열을 만들어 가로방향 포문을 돌면서 세로 방향의 합계도 같이 구했다.
그리고 대각선의 합을 구하는 포문을 돌면서 역대각선의 합계도 같이 구했다.
말로는 이렇게 쉽게 하지만 막상 처음에 생각할 때는 은근히 헷갈리는 배열 탐색 ㅠㅠ
3. 실행시간
이번에는 2등을 차지할 수 있었다.
(나도 1등 하고 싶다... 😥)
전체 기수 기록으로 봤을 때 1등이 104ms던데 정말 괴물들인가?
취업 안 하고 왜 싸피 오신 건지 신기한 분들...
💡 느낀 점
- 아직까진 쉽다. 아직까진....
- 쉬운 문제여도 배워갈게 많은 것 같다.
반응형
'문제 풀이 > SWEA' 카테고리의 다른 글
1210번 - Ladder1 (0) | 2021.08.03 |
---|---|
1220번 - Magnetic (0) | 2021.08.02 |
1208번 - Flatten (0) | 2021.08.02 |
1206번 - View (0) | 2021.08.01 |
1204번 - 최빈수 구하기 (0) | 2021.08.01 |
댓글