greenhelix
greenhelix
greenhelix
05-15 19:18
  • All (229)
    • Algorithm (118)
      • Algorithm (17)
      • Graph (0)
      • Core (6)
      • Python (18)
      • PythonSnippet (4)
      • Java (59)
      • Kotlin (14)
    • Project (0)
    • Study (8)
      • License (5)
      • EIP (3)
    • Programming (63)
      • Android (41)
      • Flutter (1)
      • Bugs Life (21)
      • Linux (0)
    • Tech (32)
      • Tech (17)
      • Drone (4)
      • Hacking (11)
    • Life (6)
      • INGRESS (1)
      • 심시티빌드잇 (0)
250x250

티스토리

hELLO · Designed By 정상우.
greenhelix

greenhelix

#08_Code Signal Arcade >> Matrix Elements Sum
Algorithm/Java

#08_Code Signal Arcade >> Matrix Elements Sum

2019. 10. 3. 22:06

Code Signal -Arcade

코드시그널
아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당. 

주로 자바 위주로 풀이를 올릴예정이고, 추가로 공부하고 있는 파이썬이나 코틀린, GO, 자바스크립트 더 나아가 스위프트까지...

되는대로 가능한대로 구글링하고 정답맞추면 바로 패스!!
이런식으로 좋은 코드이든 말든 짜집기한 결과물들을 개인적 소장을 위해 기록합니다. ^^
참고 사이트들은 아래에 링크로 남겨둘터이니 자세하고 더욱 깊은 내용들은 링크로 들어가보세요!

Matrix Elements Sum 
매트릭스 행렬의 요소들의 합을 구하라

뭔가 싶은데, 대충 내용은 유령이 들어있는 곳은 0 인 곳이다. 거기 아래의 칸은 구해지지 않는다. 
즉 열을 기준으로 봤을때, 위에서 아래로 내려가면 유령이 있다 그러면 밑에 숫자가 있든 없든 그 열은 버린다. 
그렇지 않고 숫자가 있다면 더해준다. 그러다가 유령이 나타난다? 그러면 나머지 밑에 칸의 숫자는 버린다. 

시작 전에 이중행렬? 갸우뚱하다면 이 링크로 가서 먼저 감을 잡고 가자. (기본적인 이중 다중 행렬에 대해 잘 설명되어있다. ) 


자, 다시 시작해보자.  
예를들어 matrix[ 3 ], [ 4 ] 인, 이중행렬있다고 치자.

[
[1,2,3,0],
[1,2,0,0],
[1,2,0,0]
]

이런식으로 말이다. 

문제에서는 이런 이중행렬에서 어떠한 요소가 0이라면 거기에는 유령이 있어서(?) 그 아래칸은 버린다는 것이고 그렇지 않다면 거기에 있는 수를 차곡차곡 더해주라는 것이다. 



즉, 이런식으로 아래칸으로 내려가면서 검증을 해주고, 만약 그 열에 0 이 있다면 그 아래칸은 다 무시한다.
왼쪽그림을 보면, 예시가 저 라인은 1 1 1 이므로 다 더해주는 total에 쌓아두자. 

 





다음 열도 마찬가지다. 저 라인은 2 2 2 이므로 다 total쌓아준다. 

 

 


다음은 세번째열이다. 
[ 
[1,2,3,0],
[1,2,0,0],
[1,2,0,0]
] 요래 생겼었으니깐, 3 0 0 이다. 
그렇다면 0이 등장하는데, 3은 쌓아두고 그 다음 등장하는 0은 break해준다. 저 아래 칸 matrix(2,2)는 만약 0이 아니였더라도 버리는 것이다. 바로 빠져나와서 matrix(0,3)으로 가야한다. 





마지막 열이다. 이중행렬 예시를 봐도 저 열은 0 0 0 이다. 그렇다면 다 제낀다. break. 




이렇게 모든 검사가 끝나면, total에 쌓아둔 수를 모두 더해진 값이 output으로 나와야 한다. 

이런식으로 초록색 부분만 total에 쌓이게 되어 최종적으로 output 은 
1 + 1 + 1 + 2 + 2 + 2 + 3 = 12 가 된다. 

이렇게 정상적으로 테스트가 완료된당. 


 

 

 

 

코드로 보면 아래와 같다. 

int matrixElementsSum(int[][] matrix) {
    
    // 일단 더하는 장소를 만들어준다. 
    int total = 0; 
    
    // 모든 matrix[0]의 길이는 열의 갯수이다. 그러므로 int j 는 0~length-1까지 들어간다. 
    // 단순히 열의 길이임. 기준이 아니다.
    for(int j=0; j<matrix[0].length; j++)
        
        // 기준이되고 비교를 시작하고 조건이 들어가는 for문
        // 단순히 행의 길이임. 
        for(int i =0; i<matrix.length; i++){ 
            
            if(matrix[i][j]==0)
                //0이면, 그냥 나간다. 그 열을 그리고 다음 행으로 간다. 
                break;
            
            else
                 // 0 이 아니면 차곡차고 쌓아준다.
                total += matrix[i][j];
        }
    
    return total;
}

코드를 보면 for문이 두개가 나온다.
For( j ) 는 오른쪽으로 이동하는 열이라고 보면된다. 
For( i ) 는 아래쪽으로 이동하는 행이라고 보면된다. 

for ( j ) 에서 length 를  matrix[0].length로 나타나있는데, 위에 예시를 봐도  
[ 
[1,2,3,0],
[1,2,0,0],
[1,2,0,0]
]
이런식으로 제일 밖에는 [대괄호] 로 감싸주고 있다. 즉, matrix[0]이라 하면, 예를들어, [1,2,3,0]이라고 볼수 있다. 그래서 length는 4 가 된다. 

그리고, 바로 아래 for ( i ) 는 matrix.length라고 적혀있다. 즉 전체의 행을 나타낸다. 예시에서는 3이므로, 그 아래를 보면 
matrix[ i ] [ j ] 로 되어있는 것을 볼 수 있다. 

그래서 여기서 matrix [ i ] [ j ] == 0 조건이 성립되면,  break로 빠져나와 바로 다음 열로 이동하는 것이다. 
이동하게 되면 자연스럽게  j = 0 에서 j = 1 이 된다. 만약, matrix [ i ] [ j ] 가 0 이 아니라면, 또 i ++되어 다음 행으로 내려가서  0인지 아닌지 확인해주는 것이다. 

이런식으로 0이 아니라면, total += matrix[ i ] [ j ] 를 통해 Total에 숫자를 차곡차곡 쌓아주는 것이다. 

그러면 끄읕....


점점 알고리즘을 볼수록 멀미가 나지만,,, (답지없으면 어쩄을꼬..). 
자바를 그냥 배우는 것보다 스스로 찾아가면서 문제를 풀고 답을 보고도 어떤식으로 로직이 이뤄졌는지 이해하고 바로 또 설명을 해야 하니 공부가 되는 것 같다. ^^ 

겉핡기 식으로 배운 자바를 빠삭하게 다시 이해하기 시작한 것 같아서 좋다. 


언제나 그랬든 답지는 아래 링크에 있습니다.~
https://github.com/greenhelix/CodeFights-Arcade/blob/master/Intro/Edge%20of%20the%20Ocean/matrixElementsSum/code.java

 

greenhelix/CodeFights-Arcade

Efficient Solutions to 100+ problems in CodeFights Arcade written in c++, python, java , c#, JavaScript - greenhelix/CodeFights-Arcade

github.com

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Java' 카테고리의 다른 글

#09_Code Signal Arcade >> All Longest Strings  (0) 2019.10.05
#07_Code Signal Arcade >> Almost Increasing Sequence  (2) 2019.10.02
#06_Code Signal Arcade >> Make Array Consecutive 2  (0) 2019.09.29
    'Algorithm/Java' 카테고리의 다른 글
    • #10_Code Signal Arcade >> Common Character Count
    • #09_Code Signal Arcade >> All Longest Strings
    • #07_Code Signal Arcade >> Almost Increasing Sequence
    • #06_Code Signal Arcade >> Make Array Consecutive 2
    greenhelix
    greenhelix
    개발에 관한 것들과 개인적인 것을 담는 블로그

    티스토리툴바