336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
그렇게 어려운 문제는 아니였다. 오히려 문제를 이해하는데 시간이 더 걸린 것 같다.
배열에 인자를 입력받는 것은 어렵지 않았지만 계산하는데 살짝 고민을 했다.
for (int index_x = 0; index_x < index.length; index_x++) { int total = 0; for (int i = index[index_x][0] - 1; i <= index[index_x][2] - 1; i++) { for (int j = index[index_x][1] - 1; j <= index[index_x][3] - 1; j++) { total += data[i][j]; } } result[index_x] = total; // 결과 값 저장 }
제일 중요한 부분이다.
index Array에는 좌표값이 저장되어 있다. 배열의 0번째와 2번째, 1번째와 3번째를 가지고 계산할 좌표를 구할 수 있다.
소스 공유
import java.util.Scanner; //https://www.acmicpc.net/problem/2167 public class TwoTwoTotal { static int height, length, K; static int result[], data[][], index[][]; public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); // 문자 입력을 인자로 Scanner 생성 height = scan.nextInt(); length = Integer.parseInt(scan.nextLine().trim()); data = new int[height][length]; for (int i = 0; i < height; i++) { for (int j = 0; j < length; j++) { if (j == length - 1) data[i][j] = Integer.parseInt(scan.nextLine().trim()); else data[i][j] = scan.nextInt(); } } K = Integer.parseInt(scan.nextLine().trim()); result = new int[K]; index = new int[K][4]; for (int i = 0; i < K; i++) { for (int j = 0; j < 4; j++) { if (j == 3) index[i][j] = Integer.parseInt(scan.nextLine().trim()); else index[i][j] = scan.nextInt(); } } arrayCal(); for(int i=0;i<result.length;i++) System.out.println(result[i]); } static public void arrayCal() { for (int index_x = 0; index_x < index.length; index_x++) { int total = 0; for (int i = index[index_x][0] - 1; i <= index[index_x][2] - 1; i++) { for (int j = index[index_x][1] - 1; j <= index[index_x][3] - 1; j++) { total += data[i][j]; } } result[index_x] = total; // 결과 값 저장 } } }
'알고리즘 및 자료구조 > 문제' 카테고리의 다른 글
백준알고리즘 2293번 동전 1 (0) | 2016.03.07 |
---|---|
백준알고리즘 1946번 신입사원 (0) | 2016.03.03 |
백준알고리즘 1697번 숨바꼭질 (0) | 2016.03.01 |
algospot URI Decoding (0) | 2016.02.28 |
백준알고리즘 11399번 ATM (0) | 2016.02.28 |