스터디사이트 : https://www.hackerrank.com
JAVA 알고리즘 : 6 x 6 배열 안의 모래시계집합들의 합 중 최대합 구하기
※ 코딩실습 - 조건
6 x 6 배열을 3x3크기의 모래시계모양의 집합 16개로 각자 쪼개서 만든 후,
그 16개의 집합들 각자의 합 중 제일 합이 큰 모래시계집합의 합을 구하면 된다. (말이 좀 어렵다..ㅋ)
제약조건이라 함은 단지 각 배열에 들어가야 할 수의 범위는 -9부터 9까지라는 것뿐이다.
모래시계집합 변환과정은 직접 그림으로 확인 해 보시라.
변환과정
결과
입력
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0
출력
19 ← 2 4 4
2
1 2 4 배열의 합이 모래시계집합들의 합 중 최대.
디버깅
일단 여기서 코딩으로 힌트를 줬다.
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int arr[][] = new int[6][6];
for(int i=0; i < 6; i++){
for(int j=0; j < 6; j++){
arr[i][j] = in.nextInt();
}
}
}
i 는 행이고, j 는 열이도다..
문제를 준 사이트에서 Scanner를 통하여 입력을 다 할 것이고.. 여기까지가 다이다..;
아래처럼 엑셀에서도 써가며.. 몇번을 지우고 쓰며 디버깅을 해 보았다.
모래시계집합의 행열주소
모래시계집합의 번호를 hourglass로 매겨서 Key값으로 넣었다.
코딩으로 변환한 모습. list는 HashMap클래스이고, key값은 hourglass이다.
| |||
결과 : cnt)0, i)0 : sum : 1, sum_center : 0 cnt)0, i)1 : sum : 2, sum_center : 0 cnt)0, i)2 : sum : 3, sum_center : 0 arr[1][1] / cnt)1, i)0 : sum : 3, sum_center : 1 arr[1][1] / cnt)1, i)1 : sum : 3, sum_center : 1 arr[1][1] / cnt)1, i)2 : sum : 3, sum_center : 1 cnt)2, i)0 : sum : 4, sum_center : 1 cnt)2, i)1 : sum : 5, sum_center : 1 cnt)2, i)2 : sum : 6, sum_center : 1 hourglass(1) : 7 sums.get(1) = 7, maxsum = -99 maxsum is changed : 7 maxsum is now : 7 ---------------------------- cnt)0, i)1 : sum : 1, sum_center : 0 cnt)0, i)2 : sum : 2, sum_center : 0 cnt)0, i)3 : sum : 2, sum_center : 0 arr[1][2] / cnt)1, i)1 : sum : 2, sum_center : 0 arr[1][2] / cnt)1, i)2 : sum : 2, sum_center : 0 arr[1][2] / cnt)1, i)3 : sum : 2, sum_center : 0 cnt)2, i)1 : sum : 3, sum_center : 0 cnt)2, i)2 : sum : 4, sum_center : 0 cnt)2, i)3 : sum : 4, sum_center : 0 hourglass(2) : 4 sums.get(2) = 4, maxsum = 7 maxsum is now : 7 ---------------------------- cnt)0, i)2 : sum : 1, sum_center : 0 cnt)0, i)3 : sum : 1, sum_center : 0 cnt)0, i)4 : sum : 1, sum_center : 0 arr[1][3] / cnt)1, i)2 : sum : 1, sum_center : 0 arr[1][3] / cnt)1, i)3 : sum : 1, sum_center : 0 arr[1][3] / cnt)1, i)4 : sum : 1, sum_center : 0 cnt)2, i)2 : sum : 2, sum_center : 0 cnt)2, i)3 : sum : 2, sum_center : 0 cnt)2, i)4 : sum : 2, sum_center : 0 hourglass(3) : 2 sums.get(3) = 2, maxsum = 7 maxsum is now : 7 ---------------------------- cnt)0, i)3 : sum : 0, sum_center : 0 cnt)0, i)4 : sum : 0, sum_center : 0 cnt)0, i)5 : sum : 0, sum_center : 0 arr[1][4] / cnt)1, i)3 : sum : 0, sum_center : 0 arr[1][4] / cnt)1, i)4 : sum : 0, sum_center : 0 arr[1][4] / cnt)1, i)5 : sum : 0, sum_center : 0 cnt)2, i)3 : sum : 0, sum_center : 0 cnt)2, i)4 : sum : 0, sum_center : 0 cnt)2, i)5 : sum : 0, sum_center : 0 hourglass(4) : 0 sums.get(4) = 0, maxsum = 7 maxsum is now : 7 ---------------------------- cnt)0, i)0 : sum : 0, sum_center : 0 cnt)0, i)1 : sum : 1, sum_center : 0 cnt)0, i)2 : sum : 1, sum_center : 0 arr[2][1] / cnt)1, i)0 : sum : 1, sum_center : 1 arr[2][1] / cnt)1, i)1 : sum : 1, sum_center : 1 arr[2][1] / cnt)1, i)2 : sum : 1, sum_center : 1 cnt)2, i)0 : sum : 1, sum_center : 1 cnt)2, i)1 : sum : 1, sum_center : 1 cnt)2, i)2 : sum : 3, sum_center : 1 hourglass(5) : 4 sums.get(5) = 4, maxsum = 7 maxsum is now : 7 ---------------------------- cnt)0, i)1 : sum : 1, sum_center : 0 cnt)0, i)2 : sum : 1, sum_center : 0 cnt)0, i)3 : sum : 1, sum_center : 0 arr[2][2] / cnt)1, i)1 : sum : 1, sum_center : 1 arr[2][2] / cnt)1, i)2 : sum : 1, sum_center : 1 arr[2][2] / cnt)1, i)3 : sum : 1, sum_center : 1 cnt)2, i)1 : sum : 1, sum_center : 1 cnt)2, i)2 : sum : 3, sum_center : 1 cnt)2, i)3 : sum : 7, sum_center : 1 hourglass(6) : 8 sums.get(6) = 8, maxsum = 7 maxsum is changed : 8 maxsum is now : 8 ---------------------------- cnt)0, i)2 : sum : 0, sum_center : 0 cnt)0, i)3 : sum : 0, sum_center : 0 cnt)0, i)4 : sum : 0, sum_center : 0 arr[2][3] / cnt)1, i)2 : sum : 0, sum_center : 0 arr[2][3] / cnt)1, i)3 : sum : 0, sum_center : 0 arr[2][3] / cnt)1, i)4 : sum : 0, sum_center : 0 cnt)2, i)2 : sum : 2, sum_center : 0 cnt)2, i)3 : sum : 6, sum_center : 0 cnt)2, i)4 : sum : 10, sum_center : 0 hourglass(7) : 10 sums.get(7) = 10, maxsum = 8 maxsum is changed : 10 maxsum is now : 10 ---------------------------- cnt)0, i)3 : sum : 0, sum_center : 0 cnt)0, i)4 : sum : 0, sum_center : 0 cnt)0, i)5 : sum : 0, sum_center : 0 arr[2][4] / cnt)1, i)3 : sum : 0, sum_center : 0 arr[2][4] / cnt)1, i)4 : sum : 0, sum_center : 0 arr[2][4] / cnt)1, i)5 : sum : 0, sum_center : 0 cnt)2, i)3 : sum : 4, sum_center : 0 cnt)2, i)4 : sum : 8, sum_center : 0 cnt)2, i)5 : sum : 8, sum_center : 0 hourglass(8) : 8 sums.get(8) = 8, maxsum = 10 maxsum is now : 10 ---------------------------- cnt)0, i)0 : sum : 1, sum_center : 0 cnt)0, i)1 : sum : 2, sum_center : 0 cnt)0, i)2 : sum : 3, sum_center : 0 arr[3][1] / cnt)1, i)0 : sum : 3, sum_center : 0 arr[3][1] / cnt)1, i)1 : sum : 3, sum_center : 0 arr[3][1] / cnt)1, i)2 : sum : 3, sum_center : 0 cnt)2, i)0 : sum : 3, sum_center : 0 cnt)2, i)1 : sum : 3, sum_center : 0 cnt)2, i)2 : sum : 3, sum_center : 0 hourglass(9) : 3 sums.get(9) = 3, maxsum = 10 maxsum is now : 10 ---------------------------- cnt)0, i)1 : sum : 1, sum_center : 0 cnt)0, i)2 : sum : 2, sum_center : 0 cnt)0, i)3 : sum : 2, sum_center : 0 arr[3][2] / cnt)1, i)1 : sum : 2, sum_center : 2 arr[3][2] / cnt)1, i)2 : sum : 2, sum_center : 2 arr[3][2] / cnt)1, i)3 : sum : 2, sum_center : 2 cnt)2, i)1 : sum : 2, sum_center : 2 cnt)2, i)2 : sum : 2, sum_center : 2 cnt)2, i)3 : sum : 4, sum_center : 2 hourglass(10) : 6 sums.get(10) = 6, maxsum = 10 maxsum is now : 10 ---------------------------- cnt)0, i)2 : sum : 1, sum_center : 0 cnt)0, i)3 : sum : 1, sum_center : 0 cnt)0, i)4 : sum : 1, sum_center : 0 arr[3][3] / cnt)1, i)2 : sum : 1, sum_center : 4 arr[3][3] / cnt)1, i)3 : sum : 1, sum_center : 4 arr[3][3] / cnt)1, i)4 : sum : 1, sum_center : 4 cnt)2, i)2 : sum : 1, sum_center : 4 cnt)2, i)3 : sum : 3, sum_center : 4 cnt)2, i)4 : sum : 3, sum_center : 4 hourglass(11) : 7 sums.get(11) = 7, maxsum = 10 maxsum is now : 10 ---------------------------- cnt)0, i)3 : sum : 0, sum_center : 0 cnt)0, i)4 : sum : 0, sum_center : 0 cnt)0, i)5 : sum : 0, sum_center : 0 arr[3][4] / cnt)1, i)3 : sum : 0, sum_center : 4 arr[3][4] / cnt)1, i)4 : sum : 0, sum_center : 4 arr[3][4] / cnt)1, i)5 : sum : 0, sum_center : 4 cnt)2, i)3 : sum : 2, sum_center : 4 cnt)2, i)4 : sum : 2, sum_center : 4 cnt)2, i)5 : sum : 2, sum_center : 4 hourglass(12) : 6 sums.get(12) = 6, maxsum = 10 maxsum is now : 10 ---------------------------- cnt)0, i)0 : sum : 0, sum_center : 0 cnt)0, i)1 : sum : 0, sum_center : 0 cnt)0, i)2 : sum : 2, sum_center : 0 arr[4][1] / cnt)1, i)0 : sum : 2, sum_center : 0 arr[4][1] / cnt)1, i)1 : sum : 2, sum_center : 0 arr[4][1] / cnt)1, i)2 : sum : 2, sum_center : 0 cnt)2, i)0 : sum : 2, sum_center : 0 cnt)2, i)1 : sum : 2, sum_center : 0 cnt)2, i)2 : sum : 3, sum_center : 0 hourglass(13) : 3 sums.get(13) = 3, maxsum = 10 maxsum is now : 10 ---------------------------- cnt)0, i)1 : sum : 0, sum_center : 0 cnt)0, i)2 : sum : 2, sum_center : 0 cnt)0, i)3 : sum : 6, sum_center : 0 arr[4][2] / cnt)1, i)1 : sum : 6, sum_center : 0 arr[4][2] / cnt)1, i)2 : sum : 6, sum_center : 0 arr[4][2] / cnt)1, i)3 : sum : 6, sum_center : 0 cnt)2, i)1 : sum : 6, sum_center : 0 cnt)2, i)2 : sum : 7, sum_center : 0 cnt)2, i)3 : sum : 9, sum_center : 0 hourglass(14) : 9 sums.get(14) = 9, maxsum = 10 maxsum is now : 10 ---------------------------- cnt)0, i)2 : sum : 2, sum_center : 0 cnt)0, i)3 : sum : 6, sum_center : 0 cnt)0, i)4 : sum : 10, sum_center : 0 arr[4][3] / cnt)1, i)2 : sum : 10, sum_center : 2 arr[4][3] / cnt)1, i)3 : sum : 10, sum_center : 2 arr[4][3] / cnt)1, i)4 : sum : 10, sum_center : 2 cnt)2, i)2 : sum : 11, sum_center : 2 cnt)2, i)3 : sum : 13, sum_center : 2 cnt)2, i)4 : sum : 17, sum_center : 2 hourglass(15) : 19 sums.get(15) = 19, maxsum = 10 maxsum is changed : 19 maxsum is now : 19 ---------------------------- cnt)0, i)3 : sum : 4, sum_center : 0 cnt)0, i)4 : sum : 8, sum_center : 0 cnt)0, i)5 : sum : 8, sum_center : 0 arr[4][4] / cnt)1, i)3 : sum : 8, sum_center : 0 arr[4][4] / cnt)1, i)4 : sum : 8, sum_center : 0 arr[4][4] / cnt)1, i)5 : sum : 8, sum_center : 0 cnt)2, i)3 : sum : 10, sum_center : 0 cnt)2, i)4 : sum : 14, sum_center : 0 cnt)2, i)5 : sum : 14, sum_center : 0 hourglass(16) : 14 sums.get(16) = 14, maxsum = 19 maxsum is now : 19 ---------------------------- maxsum is now : 19 sums.size : 16 |
코딩연습 & 결과
너무 생각할 게 많았다... 글로 다 옮겨적기 어려울거같다 ㅋ
나의 단점은 모든 과정을 다 모니터링을 하려 하다 보니 시간이 매우 오래 걸리는 것 같다는 것이다.
길게 보면 좋은 습관이지만, 결과만 출력하면 되는데 이런 디버깅을 넘 오래하는 것 같다 ㅋ 아래 사람이 작성한 간단한 코딩을 보면 더 허망하다 ㅋ
|
|||
결과 : 19 |
다른 사람의 초간단 코딩..
와 이사람은 하하.. ㅋ
입력부분을 제외하고
나는 for문 4번썼고 이 사람은 2번썼다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int arr[][] = new int[6][6]; // 입력값 배열에 집어넣기 for(int i=0; i < 6; i++){ for(int j=0; j < 6; j++){ arr[i][j] = in.nextInt(); } //end for } //end for int max = -64, temp; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { temp = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2]; if (temp > max){ max = temp; } } } System.out.println(max); } | cs |
'JAVA > JAVA 자료구조 알고리즘' 카테고리의 다른 글
JAVA 알고리즘 : 두 캥거루가 만나는 지점 구하기 (0) | 2016.07.15 |
---|---|
JAVA 자료구조 : 링크드 리스트(Linked List) (0) | 2016.07.14 |
JAVA 알고리즘 : 10진수에서 2진수 변환 후 출력되는 1의 최대 연속자릿수 구하기 (0) | 2016.07.10 |
JAVA 알고리즘 : AM, PM시간을 24시간형으로 변형하기 (0) | 2016.07.09 |
JAVA 알고리즘 : 독캔디를 먹는 죄수 찾기 (0) | 2016.07.08 |