뭐라도 배우면 기록하자

[알고리즘 문제풀이] View 본문

프로그래밍언어공부/C

[알고리즘 문제풀이] View

무의욕자 2019. 1. 1. 00:23

문제 출처: https://swexpertacademy.com 의 1206번 문제


삼성 측에서 "※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다." 라고 하여 제 코드와 간단한 코드 설명만 업로드하겠습니다. (C만 써보고 C++을 써본 적이 없으나, 해당 문제에서 C로 문제 제출을 지원하지 않아서 C로 그냥 짜고 C++로 제출했는데 문제없었습니다.)


내가 작성한 코드


#include <stdio.h>
int main(void){
    for(int p = 1; p < 11; p++){
        int column, row, count = 0;            //column = input값에서 제공되는 가로값, row = 문제에서 255로 제한, count = 조망권 확보된 세대의 수
        scanf("%d", &column);
        int array[column][255];                //빌딩이 지어질 수 있는 공간을 매트릭스로 구현
        for(int i = 0; i < column; i++){
            for(int j = 0; j < 255; j++){
                array[i][j] = 0;               //모든 칸 0(빌딩X)으로 초기화
            }
        }
     
        for(int i = 0; i < column; i++){
            scanf("%d", &row);
            for(int j = 1; j < row+1; j++){
                array[i][j-1] = 1;            //input에 따라 input의 row(세로)값까지 1(빌딩O)으로 초기화
            }
        }
     
        for(int i = 2; i < column-2; i++){
            for(int j = 0; j < 255; j++){
                if(array[i][j] == 1){        //조망권 확보된 세대의 조건(아래 줄까지)
                    if((array[i-1][j] == 0) && (array[i-2][j] == 0) && (array[i+1][j] == 0) && (array[i+2][j] == 0)){
                        count++;
                    }
                }
            }
        }
        printf("#%d %d\n", p, count);
    }    
    return 0;
}


저는 해당 문제를 행렬로 접근해서 문제를 풀었고 위의 로직은 금방 떠올랐지만 개인적으로 굉장히 원시적인 코드가 아닌가 생각이 듭니다;; 더 좋은 알고리즘이 있다면 공유 부탁드려요. (SWexpert Academy에는 출력값만 printf 해도 정답처리가 되다보니, 다른 분들 코드 보기가 꺼려지더라구요.. 내 포인트 ㅜㅜ)

Comments