몆 주 전부터 몇 명이 모여서 아주 간단한 코딩퀴즈를 하고 있습니다. 업무에 지장을 주면 안되기 때문에 쉬는시간에 풀 수 있는 수준의 문제여야 합니다. 즉 출제자가 생각하기에 총 1시간 미만(점심시간+저녁시간) 정도가 걸릴 것으로 예상되는 문제를 내야 하죠.
이번 문제는 again4you님이 내 주셨고, 다음과 같았습니다.
*과 -로 이루어진 M by N의 직사각형 지뢰밭 지도를 파일로부터 입력 받고, (M,N<10, *=지뢰, -=땅)
출력은 각 칸에서 인접한 지뢰가 있는지를 숫자로 나타내면 됨.
예를 들면, 아래와 같은 입력이 들어온 경우,
*---
----
-*--
----
결과는 다음과 같아야 합니다.
*100
2210
1*10
1110
언어는 C,C++,Java, python, bash shell 등 아무거나 써도 되지만,
문제 조건에 속도도 따진다고 하여 c로 결정했습니다. ㅠㅜ; (난 파이썬이 좋은데...)
시간나면 다른분들 답도 슬슬 살펴봐야겠습니다~~ :)
제 답은 다음과 같습니다.
이번 문제는 again4you님이 내 주셨고, 다음과 같았습니다.
*과 -로 이루어진 M by N의 직사각형 지뢰밭 지도를 파일로부터 입력 받고, (M,N<10, *=지뢰, -=땅)
출력은 각 칸에서 인접한 지뢰가 있는지를 숫자로 나타내면 됨.
예를 들면, 아래와 같은 입력이 들어온 경우,
*---
----
-*--
----
결과는 다음과 같아야 합니다.
*100
2210
1*10
1110
언어는 C,C++,Java, python, bash shell 등 아무거나 써도 되지만,
문제 조건에 속도도 따진다고 하여 c로 결정했습니다. ㅠㅜ; (난 파이썬이 좋은데...)
시간나면 다른분들 답도 슬슬 살펴봐야겠습니다~~ :)
제 답은 다음과 같습니다.
- #include <stdio.h>
- #include <string.h>
- int main(int argc, char* argv[])
- {
- FILE* fp;
- char buf[20];
- char result[11][11];
- int x,y,x1,y1, xLimit, yLimit;
- for(x=0;x<10;x++)
- for(y=0;y<10;y++)
- result[x][y]=48;
- y=0;
- fp = fopen(argv[1], "rt");
- while(fgets(buf, 20, fp)!=NULL) {
- xLimit = strlen(buf);
- // ignore whitespace;
- if (buf[xLimit-1]=='\n') xLimit--;
- for(x=0;x<xLimit;x++){
- if (buf[x]=='*'){
- result[y][x] = '*';
- // inc around
- for(y1=(y-1>=0)?y-1:0; y1<=y+1; y1++){
- for(x1=(x-1>=0)?x-1:0; x1<=x+1; x1++) {
- if (result[y1][x1]!='*') result[y1][x1]++;
- }
- }
- }
- }
- y++;
- }
- fclose(fp);
- // print result
- yLimit = y;
- for(y=0;y<yLimit;y++){
- for(x=0;x<xLimit;x++){
- }
- }
- }