5강
접근법 :
1) 형식이 정해진 문자열은 문자열 전체를 입력받는다.
2) 입력받은 숫자들 중 필요한 부분의 char 배열을 읽어서 비교한다.
3) 나이를 계산하는 식은 1900년도생 이라 했을 때, 2019-(1900+front)+1 이다.
참고)
6강
접근법 :
1) 문자열 중에 읽어야 할 것은 정수로 표현이 가능한 문자열 뿐이다. 즉 아스키코드 48번~57번 사이의 값을 찾아 내야 한다.
2) 찾아낸 값들은 나열을 해야 한다. 하지만 이는 수식을 통해 구할 수 있다.
해당 수식 뜻은 현재 있는 값을 곱하기 10을 하여 일의자리를 비게 해주고 그자리에 일의자리 숫자를 더한다.
참고)
7강
접근법 :
1) 띄어쓰기가 섞여있는 문자열은 gets(string s) 명령어를 통해 읽어온다.
2) 배열에 char를 넣어 문자열을 만들어 줄때는 끝에 '\0'을 넣어준다.
8강
접근법 :
1) 괄호 문제의 경우 스택 개념이 들어간다. 왜냐면 괄호는 왼쪽 괄호가 있을때 오른쪽 괄호와 짝이 되기 때문이다. 왼쪽 괄호가 없이 오른쪽 괄호가 나오면 괄호의 쓰임은 잘못 되게 된다. 또한 왼쪽 괄호가 오른쪽 괄호보다 많아도 짝이 맞지 않아 쓰임이 맞지 않는다.
즉 이것은 왼쪽 괄호가 나오면 스택에 왼쪽 괄호를 쌓고 오른쪽 괄호가 나오면 스택에 있는 괄호를 빼가는 구조가 되어야한다. 만약 오른쪽 괄호가 나왔는데 스택이 비어있거나, 문자열을 전부 돌았는데 스택에 괄호가 남아 있다면 문제가 된다.
2) 이 문제는 꼭 스택을 사용하지 않고, cnt라는 변수를 하나 두어서 왼쪽 괄호가 나오면 cnt++ 오른쪽 괄호가 나오면 cnt--를 해주고, 만약에 cnt--를 한 후에 값이 0보다 작게 되거나, 문자열을 전부다 돌고나서 cnt의 값이 0이 아니면 NO를 출력해주면 된다. 나머지 상황에는 YES
9강
접근법 :
1) 3만번 반복을 하기 위해서는 nlogN 정도의 시간 복잡도를 가져야 한다.
2) 의 방식은 안된다.
3) 약수라는 것은 사실 어떤 수의 배수라는 것이다. 이를 활용하여 인트형 배열을 선언하고, 1일때는 배열의 처음부터 끝까지 1일 더해준다. 2의 경우에는 2,4 ... 이런식으로 2의 배수만 값을 증가 시킨다. 3일때는 3,6... 이런식으로 3의 배수만 값을 증가 시킨다.
4) 이러기 위해서는 중첩for문을 사용하되 안에 있는 for문의 조건식을 신경 써주어야 한다.
for(int i=1;i<=n;i++){
for(int j=i;i<=n;j=j+i){
cnt[j-1]++;
}
}
선언된 인트형 배열이 앞의 수부터 각각의 약수의 개수라고 할 때, 다음과 같이 반복문을 작성해주게 되면 i의 값의 배수의 값만 증가 시켜준다. 해당 값은 약수와 같다.
10강
접근법 :
입력 받은 정수에 대하여 digit_sum을 계산을 하고 앞에서 부터 해당값이 최댓값인지를 확인해라. digit_sum 함수는 정수를 입력 받으면 정수 각각의 자리수의 있는 수를 더하는 함수이다. 이를 구현하기 위해서는 일의자리수부터 계산하면 된다. x를 입력 받는다 했을 때, x%10을 하면 x 정수의 일의 자리수만 나오게 된다. 그러면 그 값을 변수 하나를 선언하여 저장해두고, x/10을 하여 자리수를 하나 땡겨준다. 그리고 다시 계산한다. 이 계산을 x < 0 이 될때까지 실시하면 모든 자릿수의 수를 더한 값을 구할 수 있다.