**배열 - OX퀴즈
*새롭게 배운 개념)
- 2차원 동적배열 생성 및 할당해제
- 함수의 인자전달방식 : 배열을 parameter로 지정시 배열을 argument로 넣어도 배열이 아닌 pointer로 전달된다. 때문에 전달받은 배열(pointer)로 함수내부에서 연산시(대표적으로 배열크기구하기) 기대하던 결과가 나오지 않을 수 있다.
- cin에 char array를 대입 시, 프로그램 실행 후 CLI에 문자열을 입력하면 각 요소가 하나하나 char array에 대입된다. char array 생성시 초기화를 ()으로 해주면 (null로 해주면) 이후 문자열의 끝을 지정할 때 편리하게 사용할 수 있다(아래 operation함수에서 null로 반복문 break를 건 것처럼).
*총평
- 입력받는 값을 저장하는 과정에서 동적할당 말고 다른 것을 사용할 수 있는지가 궁금하다. 동적배열로 생성하면 꼭 배열의 크기를 initialize해주어야 하는데, 이런 것 없이 그냥 입력하는 대로 배열의 크기가 알아서 조정되게(stl의 vector?) 만들어 보고싶다. 저 초기화 과정은 동적할당의 의미가 퇴색되게 하는 것 같다.
https://www.acmicpc.net/problem/8958
8958번: OX퀴즈
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수
www.acmicpc.net
#include <iostream>
using namespace std;
int operation(char array[]); // function declaration
int main() {
// 입력받을 값의 개수
int n;
cin >> n;
// 2차원 동적배열
char** cpp = new char* [n]();
for (int i = 0; i < n; i++) {
cpp[i] = new char[80]();
}
// 입력값을 cpp에 각각 할당
for (int i = 0; i < n; i++) {
cin >> cpp[i];
}
// 입력값 연산
for (int i = 0; i < n; i++) {
cout << operation(cpp[i]) << '\n';
}
// 동적할당 해제
for (int i = 0; i < n; i++)
delete[] cpp[i];
delete[] cpp;
return EXIT_SUCCESS;
}
// 연산
int operation(char array[]) {
int result = 0;
int ocounter = 1; // O의 개수
for (int i = 0; i < 80; i++) {
if (array[i] == '\0') // 입력값 끝날시 break
break;
if (array[i] == 'O') {
result += ocounter;
ocounter++;
}
else if (array[i] == 'X') {
ocounter = 1;
}
}
return result;
}
'알고리즘 > 백준' 카테고리의 다른 글
[Baekjoon] 1929_소수 구하기 (0) | 2022.04.11 |
---|---|
[Baekjoon] 1436_영화감독 숌 (0) | 2022.04.10 |
[Baekjoon] github repository 생성 (0) | 2022.04.08 |
백준 단계별 풀이 (0) | 2022.03.13 |