ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [NYPC2016_예선문제] 넥슨은 다람쥐를 뿌려라
    프로그래밍/알고리즘 2017. 12. 2. 20:52


    문제


    풀이

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    //넥슨은 다람쥐를 뿌려라 
    #include <stdio.h>
    int main(){
        int n=0//사용자에게 입력받은 n의 값을 저장할 정수형 변수 n 선언 
        scanf("%d"&n); //사용자에게 n의 값을 입력받아 변수 n에 저장 
        char map[n][21]; //n행의 맵을 저장할 문자열 배열 map을 선언 
        for(int i=0; i<n; i++scanf("%s"&map[i]); //한 행씩 입력받아 배열 map에 저장 
        int Da=0//다람쥐수
        int Pl=0//플레이어수
        for(int i=0; i<n; i++){
            for(int j=0; map[i][j]!='\0'; j++){
                if(map[i][j]=='D') Da++;
            }
        }
        for(int i=0; i<n; i++){
            for(int j=0; map[i][j]!='\0'; j++){
                if(map[i][j]=='C') Pl++;
            } 
        }
        if(Da>=Pl*2){ //이미 다람쥐의 수가 플레이어 수의 두 배 이상인 상황이므로 다람쥐를 새로 생성할 필요가 없음  
            printf("%d\n", n);
            for(int j=0; j<n; j++printf("%s\n", map[j]); 
            return 0
        }
        else{
            int neededDa=Pl*2-Da;
            for(int i=0; i<n; i++){
                for(int j=0; map[i][j]!='\0'; j++){
                    if(map[i][j]=='.'){
                        if(neededDa>0){
                            map[i][j]='D';
                            neededDa--;
                            if(neededDa==0){
                                printf("%d\n", n);
                                for(int k=0; k<n; k++printf("%s\n", map[k]); 
                                return 0;
                            }
                        }
                    }
                } 
            }
        } 
    }
    cs


    설명

    n: N의 값(게임 화면의 크기: N*N)
    map: 맵을 저장할 문자열 배열
    Da: 맵에 있는 다람쥐의 수
    Pl: 맵에 있는 플레이어의 수
    neededDa: 새로 생성해야 하는 다람쥐의 개수
    i, j, k: 반복문에 사용
    -----
    for 문을 사용해서 맵 상에 존재하는 다람쥐와 플레이어의 수를 구함.
    이후 다람쥐의 수가 플레이어 수의 두 배 이상인지 체크하고,
    그렇지 않다면 맵을 처음부터 다시 스캔해서 맨 앞에서부터 빈자리를 찾아,
    더 필요한 다람쥐의 수만큼 빈자리에 다람쥐를 생성해 출력함.


    2017.08

    댓글

Designed by Tistory