[내일배움캠프/C++] 기초 문법

김세희·2025년 5월 27일
post-thumbnail

✍️오늘 한 일

  1. 알고리즘 코드카타
  2. 게임 개발자를 위한 C++ 문법 1주차 1-1
    - 과제: *로 다이아몬드 그리기

1. 알고리즘 코드카타

내배캠에서 알고리즘 코드카타를 한다는 걸 어제 저녁에 처음 알게되어서 오늘 오전에 10번까지 제출했다.

  • 짝수의 합
#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    for(int i=1; i <= n/2; i++){
        answer += 2*i;
    }
    return answer;
}
  • 배열의 평균 값
#include <string>
#include <vector>

using namespace std;

double solution(vector<int> numbers) {
    double answer = 0;
    for(int i=0; i<numbers.size(); i++){
        answer+=numbers[i];
    }
    return answer/numbers.size();
}

2. 게임 개발자를 위한 C++ 문법 1주차 1-1

전위연산 ++a / 후위연산 a++ 차이

int a = 1;
int b = 0;
b = ++a; // b=2, a=2
b = a++; // b=2, a=3

C/C++에서 0은 False 나머지는 대부분 True
: 모든 비트가 0이면 False 아니면 True

배열은 통째로 복사 및 대입이 불가능함. 개별 원소는 가능

포인터
: int* ptr 포인터 변수. 주소값을 저장함
ptr = &num // num의 주소
*ptr=100 // ptr의 주소로 가서 값을 100으로 바꿔라-> num=100;

  • 배열의 포인터
    : 배열의 시작주소가 넘어감

    #include <iostream>
    using namespace std;
    // 함수: 포인터를 사용한 값 변경
    void modeifyArr(char* ptr) {
        ptr[0] = 'X';  // 포인터가 가리키는 변수의 값을 변경
    }
    int main() {
        char str[4] = {'A', 'B', 'C', 'D'};
        modeifyArr(str); // num의 주소 전달
    
        cout << "포인터 전달 후 str[0] = " << str[0] << endl;
        // 출력: 포인터 전달 후 str[0] = X
        return 0;
    }
  • 레퍼런스
    : 변수의 레퍼런스 값을 변경하면 변수 값도 변경된다.
    하지만 한번 지정된 이상 다른 변수의 레퍼런스가 될 수 없다.


과제: *로 다이아몬드 그리기

#include <iostream>
#include "Main.h"

// 숫자를 입력받아 *로 이루어진 다이아몬드 출력
// 각 줄의 별 개수는 홀수

int main() 
{
	int num = 0;
	cout << "숫자 입력: " ;
	cin >> num;

	//중앙 라인의 별 개수 구하기
	int star = 1 + (num - 1) * 2;

	int i = 0;
	bool isBot = false;

	while (i>=0) {

		// 별로 삼각형 그리기
		for (int j = 0; j < star; j++) {
			//현재 줄에서 별의 인덱스 구하기
			//1+2i 개의 별, (star-1)/2번째 인덱스
			if (j< (star - 1) / 2 - i || j >(star - 1) / 2 + i) {
				cout << " ";
			}
			else {
				cout << "*";
			}
		}
		// 줄바꿈
		cout << endl;

		// 아래 삼각형으로 넘어갈때만 true로 변경
		if (!isBot) {
			isBot = i == num - 1 ? true : false;
		}
		
		// 아래 삼각형일때 i--
		if (isBot) {
			i--;
		}
		else {
			i++;
		}
	}

	return 0;
}

0개의 댓글