Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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 26 27 28
29 30
Archives
Today
Total
관리 메뉴

최고를 향해 최선을 다하자

[SWEA] 2117. 홈 방범 서비스 본문

SWEA

[SWEA] 2117. 홈 방범 서비스

응애개발자 2020. 6. 5. 22:16

안녕? 나는 응애개발자

 

 

오늘은 SWEA의 2117번 문제를 풀었다.

 

사실 나는 디버그 할 때마다 로직 수정보다는 인덱스에서 시간을 참 많이 소모해버리는데...

오늘은 시간을 별로 안 써서 행복했다.

 

딱히 어려운 문제는 아니었지만 풀면서 'for문이 이렇게 들어가 버린다고? 이거 맞긴 해?' 하면서 풀었는데 맞다.

SWEA은 엥스러운 문제를 잘 내는 것 같다.

 

 

각설, 코드 리뷰 가자  

 

#include <iostream>
#include <math.h>

using namespace std;

int N,M;
int map[20][20];
int ans = 0;

//현재 좌표가 맵 범위 밖이면 false, 안이면 true를 리턴한다
bool check(int y, int x){
    if((y>=0) && (x>=0) && (x<N) && (y<N))
        return true;
    return false;
}

//운영 비용 = K * K + (K - 1) * (K - 1)을 계산하여 리턴하는 함수
int cost(int k){
    int s = 0;
    s += (k*k) + ((k-1)*(k-1));
    return s;
}

//초기화 함수
void init_(){
    ans = 0;
    for(int i=0; i<N; i++)
        for(int j=0; j<N; j++)
            map[i][j] = 0;
}

void sol(){
    //마름모의 범위당
    for(int k=1; k<=N+1; k++){
        
        //N*N범위를 체크하면서
        for(int i=0; i<N; i++){
            for(int j=0; j<N; j++){
                int sum = 0;
                
                //해당좌표로부터 K범위확인
                for(int m=i-(k-1); m<=i+(k-1); m++){
                    for(int n=j-(k-1); n<=j+(k-1); n++){
                    
                        //마름모 범위 안에 없다면
                        if((abs(i-m) + abs(j-n)) > (k-1))
                            continue;

                        //마름모 범위 안에 있으면서 집이 있다면
                        if(check(m,n) && map[m][n]!=0)
                            sum++;
                    }
                }
                //모든 범위 확인후 total에 저장
                if((M * sum - cost(k)) >= 0 && sum > ans) 
                    ans = sum;
            }
        }
    }
}

int main(int argc, char** argv){
    int test_case;
    cin>>test_case;
    for(int T=1; T<=test_case; T++){
        cin>>N>>M;
        for(int i=0; i<N; i++){
            for(int j=0; j<N; j++){
                cin>>map[i][j];
            }
        }
        sol();
        cout<<"#"<<T<<" "<<ans<<endl;
        init_();
    }
    return 0;
}

 

나는 개인적으로 필요한 기능을 함수로 구현하여 필요할 때마다 갖다 사용하는 것을 즐긴다.

귀찮으신 분들은 그냥 코딩하셔도 된다!

안녕!

'SWEA' 카테고리의 다른 글

[SWEA] 2382. 미생물 격리  (0) 2020.06.06
[SWEA] 2105. 디저트 카페  (0) 2020.06.06
[SWEA] 4013. 특이한 자석  (0) 2020.06.05
Comments