c++문제풀이

문제

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 N(0 ≤ N ≤ 12)가 주어진다.

출력

첫째 줄에 N!을 출력한다.

예제 입력

10

예제 출력

3628800

0! 가 1을 의미함을 condition에서 빼면 안되는 것을 주의
재귀함수에 대한 이해 Recursive Function.

#include <stdio.h>
int factorial(int n)
{
	if(n == 1 || n==0) //0!(1)
	  return 1;
	return n * factorial(n-1);  //재귀함수 (recursive function)
}
int main()
{
	int n;
	scanf("%d", &n);
	
	printf("%d", factorial(n));
	return 0;
}

c++문제풀이

문제

“OOXXOXXOOO”와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다. “OOXXOXXOOO”의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다. OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.

출력

각 테스트 케이스마다 점수를 출력한다.

예제 입력

5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX

예제 출력

10
9
7
55
30

for 조건문
either an expression which is contextually convertible to bool. This expression is evaluated before each iteration, and if it yields false, the loop is exited.
A declaration of a single variable with a brace-or-equals initializer. the initializer is evaluated before each iteration, and if the value of the declared variable converts to false, the loop is exited.

전위연산자는 할당 전에 연산을 처리
후위연산자는 할당 이후에 연산을 처리
The difference between the two lies in their return values. The prefix increment returns the value of a variable after it has been incremented. On the other hand, the more commonly used postfix increment returns the value of a variable before it has been incremented.

#include<cstdio>
int t;
char s[81];
int main() {
	scanf("%d", &t);
	while (t--) {
		int r = 0,c=0;
		scanf("%s", s);
		for (int i = 0; s[i]; ++i) 
		  s[i] == 'O' ? r += ++c : c = 0;
		printf("%d\n", r);
	}
	return 0;
}

1. C++ Range based for loop

c++11 에서 새롭게 소개된 for문.

범위 지정이 없는 for 루프 (Executes a for loop over a range.)
컨테이너 기반의 for 루프 (Used as a more readable equivalent to the traditional for loop operating over a range of values, such as all elements in a container.)

  1. range based for loop를 사용하면 전통적인 for 문과 달리 크기를 지정할 필요가 없습니다.
    1. c++98 - 기존의 for 문
    2.    int main()
         {
            int x[5] = {1,2,3,4,5};
      	
            for(int i = 0; i<5; i++)
      	      cout << x[i] << "\n";
         }
         
    3. since C++11 - range based for 루프
    4.    int main()
         {
            int x[5] = {1,2,3,4,5};
      	  
            for(auto n : x)
        	    cout << n << "\n";
         }
         
      c언어에서 사용하던 for문은 배열(또는 컨테이너)의 크기가 변경될 경우 for문의 코드가 변경되어야합니다. 하지만 range based for loop에서는 크기를 지정할 필요가 없습니다.
  2. range based for loop의 원리
  3. - 컴파일러가 생성하는 코드
     int main()
     {
       int x[5] = {1,2,3,4,5};
    	 
       for(auto p = begin(x); p != end(x); ++p)
       {
    	    auto n = *p;
    	 
    	    cout << n << "\n";
       }
     }  
     

range based for loop.