농작물 수확하기 URL
내 풀이 1
import java.io.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int t = 1; t <= T; t++) {
int N = Integer.parseInt(br.readLine());
int[][] graph = new int[N][N];
for (int i = 0; i < N; i++) {
String s = br.readLine();
for (int j = 0; j < N; j++) {
graph[i][j] = (int) s.charAt(j) -'0';
}
}
int sum = 0;
int left = N/2, right = N/2;
for (int i = 0; i < N; i++) {
for (int j = left; j <= right; j++) {
sum += graph[i][j];
}
if (i < N/2) {
left--;
right++;
} else {
left++;
right--;
}
}
System.out.println("#" + t + " " + sum);
}
}
}
처음 생각해서 푼 방식으로 graph배열에 값을 다 입력 받은 후
- 가운데 값을 기준으로 left, right 변수를 생성
- 행이 N/2보다 작은경우엔 범위를 2씩 늘려야한다.
left--
right++
- 행이 N/2보다 크거나 같은경우엔 줄어들어야한다.
left++
right--
- 반복문을 돌며 값을 다 더해준다.
위 방식도 맞지만 입력받으면서 더 해 주는것도 가능하다고 생각하여 입력받으면서 더해주는 방식으로 개선!
내 풀이2
import java.io.*;
public class SW2805 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int t = 1; t <= T; t++) {
int N = Integer.parseInt(br.readLine());
int sum = 0;
int left = N/2, right = N/2;
for (int i = 0; i < N; i++) {
String s = br.readLine();
for (int j = left; j <= right; j++) {
sum += (int) s.charAt(j) - '0';
}
if (i < N/2) {
left--;
right++;
} else {
left++;
right--;
}
}
System.out.println("#" + t + " " + sum);
}
}
}
배운점

풀이 성공에 그치지 않고 더 효율적인 코드를 만들기 위해 개선하는 과정을 통해 더 나은 성장을 할 수 있을 것 같다.