알고리즘/백준

백준 단계별 풀이

:) :) 2022. 3. 13. 15:42

**배열 - 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