본문 바로가기
IT/[Everyday]Coding

사각형그리기1

by Jang HyunWoong 2014. 12. 19.

사각형그리기1
Time Limit : 1000MS

 
사각형의 높이 n과 너비 m을 입력받은 후 사각형 내부에 지그재그 형태로 1부터 n*m번까지 숫자가 차례대로 출력되는 프로그램을 작성하시오.

< 처리조건 > 
숫자의 진행 순서는 처음에 왼쪽에서 오른쪽으로 너비 m만큼 진행 한 후 방향을 바꾸어서 이를 반복한다.

 
사각형의 높이n와 너비m( n과 m의 범위는 100 이하의 정수)을 입력받는다.

 
위에서 형태의 직사각형을 입력에서 들어온 높이 n과 너비 m에 맞춰서 출력한다. 숫자 사이는 공백으로 구분한다.


4 5


1 2 3 4 5 
10 9 8 7 6 
11 12 13 14 15 
20 19 18 17 16  


3 2


1 2 
4 3 
5 6

 

<source code>

 

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE *inFp = fopen("input.txt", "r");
  5. FILE *outFp = fopen("output.txt", "w");
  6. int n, m;
  7. int num = 0;
  8. int sw = 0;
  9.  
  10. if(!inFp || !outFp)
  11. {
  12. printf("File Error!\n");
  13. return 0;
  14. }
  15. fscanf(inFp, "%d %d", &n, &m);
  16.  
  17. for(int i=1; i<(n*m+1); i++)
  18. {
  19. switch (sw)
  20. {
  21. case 0:
  22. num=num+1;
  23. fprintf(outFp, "%d ", num);
  24. if(!(i%m)){
  25. num = num+m;
  26. sw = 1;
  27. fprintf(outFp, "\n");
  28. }
  29. break;
  30. default:
  31. fprintf(outFp, "%d ", num);
  32. num=num-1;
  33. if(!(i%m)){
  34. num = num + m;
  35. sw = 0;
  36. fprintf(outFp, "\n");
  37. }
  38. break;
  39. }
  40. }
  41. fclose(inFp);
  42. fclose(outFp);
  43. return 0;
  44. }

 

스위치 문을 사용했다.

예를 들어서 (4 5)가 입력되면 

4행 5열을 생각했고 마지막 숫자는 4*5라는 것을 알 수 있다. 

1~5까지는 더하기를 하고 마지막 5열에 오면 더하기 열의 숫자

그리고 다음 열에서는 빼기 마지막 5열에 오면 더하기 열의 숫자

이것을 반복하면 만들 수 있다. 

 

시간복잡도를 계산한다고 하면 O(n) 

반응형

'IT > [Everyday]Coding' 카테고리의 다른 글

퀵정렬 (Quick Sort)  (0) 2014.12.19
사각형그리기2  (0) 2014.12.19
파스칼 삼각형  (0) 2014.12.19
[피보나치 수열]  (0) 2014.12.19
[이항계수]경우의 수 구하는 프로그램  (0) 2014.12.19