-
[NYPC2016_예선문제] 넥슨은 다람쥐를 뿌려라프로그래밍/알고리즘 2017. 12. 2. 20:52
문제
풀이
12345678910111213141516171819202122232425262728293031323334353637383940414243//넥슨은 다람쥐를 뿌려라#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
'프로그래밍 > 알고리즘' 카테고리의 다른 글
문제적남자 131회 - 로꾸꺼 (0) 2017.12.05 [NYPC2017_문제풀이] 알사탕 (2) 2017.12.02 [NYPC2016_예선문제] 마비노기 듀얼: 올바른 덱인가요? (0) 2017.12.02