[NYPC 2016 예선]넥슨은 다람쥐를 뿌려라

문제풀이/기타 문제 2017.07.30 댓글 Plorence

2038년, 바람의 나라 출시 42년이 지나, 주모 왈숙은 사냥터에 다람쥐를 생성하는 규칙을 바꾸기로 하였다. 
DoD(DaramG on Demand)라 불리는 최첨단 기술을 통해 다람쥐가 적어도 플레이어 수보다 두 배가 되도록 유지해서 사람이 많을 때도 충분한 양의 다람쥐가 있게끔 하기로 했다.

가로 N칸, 세로 N칸으로 구성된 게임 화면에서 칸마다 캐릭터 또는 다람쥐가 있는지 주어질 때, 다람쥐가 모자란 지 판단해 모자란다면 필요한 다람쥐를 생성할 위치를 출력하는 프로그램을 작성하여라.

입력

첫 줄에 게임 화면의 크기 N이 주어진다. N은 5 이상 20 이하이다. 
다음 N 줄에 걸쳐 N개의 문자가 공백 없이 주어진다. 문자는 다음 중 하나이다:

  • D: 다람쥐가 있음
  • C: 플레이어 캐릭터가 있음
  • .: 빈칸임

출력

입력 형식에서 게임 화면을 출력한 것과 동일하게, 먼저 첫 줄에 N을 출력하고 그 다음 N줄에 걸쳐 N개의 문자를 공백 없이 사용하여 임의로 정한 다람쥐의 배치 상태를 출력한다. 문자는 DC. 중 하나가 되어야 한다.

새로운 다람쥐는 같이 D문자를 사용하며, 위치는 수만 만족하면 아무 곳이나 지정하여도 무방하다.

다람쥐가 모자라지 않으면 새로운 다람쥐를 생성하지 않고 입력된 내용을 그대로 출력해야 한다. 반면 다람쥐가 모자라다면 출력된 다람쥐의 수가 적어도 플레이어 수보다 두 배가 되도록 하여야 한다. 
다람쥐 및 플레이어 캐릭터들은 서로 겹쳐있을 수 없다. 입력은 필요로 하는 다람쥐를 항상 생성할 수 있음이 보장된다.

입력 예시 1

1
2
3
4
5
6
5
.....
.....
..C..
.....
.....
cs

출력 예시 1

1
2
3
4
5
6
5
D....
..D..
.C...
.....
.....
cs

입력 예시 2

1
2
3
4
5
6
5
DD...
.D...
.D...
.DD..
.....
cs

출력 예시 2

1
2
3
4
5
6
5
DD...
.D...
.D...
.DD..
.....
cs

다람쥐만 있는 경우에는 플레이어 수가 0이므로, 다람쥐가 모자라지 않다. 따라서 새로운 다람쥐를 만들어서는 안 된다.

채점 규칙

모든 숨겨진 입력 데이터에 대해 정답이면 만점을 주고, 하나라도 틀리면 점수를 주지 않는다.


코드(Code)

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
void ShowPan(int count,char arr[][100]);
void RandomPan(int count,char arr[][100]);
int main(void) {
    srand((int)time(NULL));
    char arr[100][100= { 1 };
    int count = 0;
    scanf("%d"&count);
    for (int i = 0; i < count; i++) {
        for (int j = 0; j <= count; j++) {
            scanf("%c"&arr[i][j]);
        }
    }
    RandomPan(count, arr);
    ShowPan(count, arr);
    //printf("%d", arr[2][4]);
 
 
}
void ShowPan(int count,char arr[][100]) {
    for (int i = 0; i < count; i++) {
        for (int j = 0; j <= count; j++) {
            printf("%c", arr[i][j]);
        }
    }
}
void RandomPan(int count,char arr[][100]) {
    int PlayerNumber = 0;
    int Daramji = 0;
    int random = 0;
    for (int i = 0; i <= count; i++) {
        for (int j = 0; j <= count; j++) {
            if (arr[i][j] == 'C') {
                PlayerNumber++;
            }
            if (arr[i][j] == '\0') {
                arr[i][j] == '\n';
            }
        }
    }
        Daramji = PlayerNumber * 2;
        for (int i = 0; i <= count; i++) {
            for (int j = 0; j <= count; j++) {
                random = rand() % 4;
                if (Daramji == 0) {
                continue;
                }
                if (random == 1) {
                    if (arr[i][j] != 'C' && arr[i][j] != '\n') {
                        arr[i][j] = 'D';
                        Daramji--;
                    }
                }
            }
        }
}
cs


댓글