군대에서_코딩하기_알고리즘_18

신태원·2021년 10월 24일
0

군대에서_코딩하기

목록 보기
19/30
post-thumbnail

업로드하고 싶은 문제들이 여럿있었는데, 시간이 녹녹치않고.. 그리고 문제를 푼 당일에 올리지 않으면 코드를 리뷰하는데 있어서 시간이 조금 걸리므로.. 여러 문제들을 올리지 못했다..
오늘 문제는 굉장히 쉬운 문젠데, 2차원 배열을 이용해 격자판에 주어진 숫자들 중 '봉우리'를 찾는 문제이다.

다음과 같이 주어질 경우, 봉우리의 개수는 총 10개 이다.
분명 예전 알고리즘 수업때 이러한 문제를 굉장히 스마트하게 푸는 방법이 있었는데, 아마 포인터를 이용한 linked list 문제였을 것이다.. 지금은 거의 생각나지 않지만, 후반부에는 나오지 않을까 생각중..
물론 이번에는 2개의 2차원 배열을 이용해 그냥 반복문으로 풀었다.
코드는 다음과 같다.

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int main(){
    
    int N, i, j;
    cin>>N;
    int map[51][51]={0,};
    int compare[51][51] = {0,};
    int cnt=0;
    
    for(i=1; i<N+1; i++){
        for(j=1; j<N+1; j++){
            cin>>map[i][j];
        }
    }
    
    for(i=1; i<N+1; i++){
        for(j=0; j<N; j++){
            if((map[i][j+1]>map[i][j])&&(map[i][j+1]>map[i][j+2])){
                compare[i][j+1]++;
            }
            
        }
    }
    
    for(i=1; i<N+1; i++){
        for(j=0; j<N; j++){
            if((map[j+1][i]>map[j][i])&&(map[j+1][i]>map[j+2][i])){
                compare[j+1][i]++;
            }
        }
    }
    
    for(i=1; i<N+1; i++){
        for(j=0; j<N+1; j++){
            
            if(compare[i][j]==2){
                cnt++;
                
                //cout<<"i좌표: "<<i<<" j좌표: "<<j<<endl;
               // cout<<compare[i][j]<<endl;
            }
        }
    }   
    
    cout<<cnt;    
}
profile
일단 배우는거만 정리해보자 차근차근,,

0개의 댓글