μ½”λ”©ν…ŒμŠ€νŠΈ/자료ꡬ쑰

[C++자료ꡬ쑰] λ°°μ—΄(Array)κ΅¬ν˜„

kite707 2021. 4. 10.
κ΅¬ν˜„ λ‚΄μš©
at(π’Š) : λ°°μ—΄ Arr의 인덱슀 i에 μ €μž₯된 값을 좜λ ₯ν•œλ‹€.(단, 0 ≤ 𝑖 ≤ 𝑁 − 1)

add(π’Š, 𝒗𝒂𝒍𝒖𝒆) : λ°°μ—΄ π΄π‘Ÿπ‘Ÿμ˜ 인덱슀 π‘–μ—μ„œ 𝑁 − 2의 값을 였λ₯Έμͺ½μœΌλ‘œ ν•œ μΉΈμ”© μ΄λ™ν•œλ‹€. 그리고 λ°°μ—΄ π΄π‘Ÿπ‘Ÿμ˜ 인덱슀 π‘–λ²ˆμ§Έμ— π‘£π‘Žπ‘™π‘’π‘’λ₯Ό μ‚½μž…ν•œλ‹€. (단, 0 ≤ 𝑖 ≤ 𝑁 − 1)

remove(π’Š): λ°°μ—΄ π΄π‘Ÿπ‘Ÿμ˜ 인덱슀 𝑖 + 1μ—μ„œ 𝑁 − 1κΉŒμ§€μ˜ 값을, μ™Όμͺ½μœΌλ‘œ ν•œ μΉΈμ”© μ΄λ™μ‹œν‚¨λ‹€. 그리고 λ°°μ—΄ π΄π‘Ÿπ‘Ÿμ˜ 𝑁 − 1번째 인덱슀의 값을 0으둜 ν• λ‹Ήν•œλ‹€. (단, 0 ≤ 𝑖 ≤ 𝑁 − 1)

set(π’Š, 𝒗𝒂𝒍𝒖𝒆): λ°°μ—΄ π΄π‘Ÿπ‘Ÿμ˜ 인덱슀 π‘–λ²ˆμ§Έμ— π‘£π‘Žπ‘™π‘’π‘’λ₯Ό ν• λ‹Ήν•˜κ³  π‘£π‘Žπ‘™π‘’π‘’λ₯Ό 좜λ ₯ν•œλ‹€. (단, 0 ≤ 𝑖 ≤ 𝑁 −1)

print(): λ°°μ—΄ π΄π‘Ÿπ‘Ÿμ˜ λͺ¨λ“  값을 곡백으둜 ꡬ뢄지어 μ°¨λ‘€λŒ€λ‘œ 좜λ ₯ν•œλ‹€.

μ½”λ“œκ°€ λ³„λ‘œ 어렡지 μ•Šμ•„μ„œ μ½”λ“œμ— μ£Όμ„λ§Œ 달고 μ„€λͺ…은 νŒ¨μŠ€ν•˜κ² λ‹€.

#include <iostream>
using namespace std;

class Array {
private:
	int* arr; //λ°°μ—΄, 이후에 동적할당 ν•  것
	int arrSize; //λ°°μ—΄μ˜ 크기

public:
	Array(int size) { //Arrayμƒμ„±μž
		arrSize = size;  //arrSizeλ₯Ό μž…λ ₯받은 κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”
		arr = new int[arrSize]; //arrSize크기의 intν˜• λ°°μ—΄ 동적할당
		for (int i = 0; i < size; i++) { //각 인덱슀 μ›μ†Œλ“€ 0으둜 μ΄ˆκΈ°ν™”
			arr[i] = 0;
		}
	}

	int at(int idx) {  //idxμœ„μΉ˜μ— μžˆλŠ” μ›μ†Œ 리턴
		return arr[idx];
	}

	void add(int idx, int value) { //idxμœ„μΉ˜μ— valueκ°’ μ‚½μž…
		if (idx > arrSize - 1) {  //λ²”μœ„ λ²—μ–΄λ‚˜λ©΄ -1좜λ ₯
			cout << -1 << endl;
		}
		else {
			for (int i = arrSize - 2; i >= idx; i--) { //맨 λ’€μ—μ„œ 2번째 μ›μ†ŒλΆ€ν„° idx번째
				arr[i + 1] = arr[i];                   //μ›μ†ŒκΉŒμ§€ μ™Όμͺ½μœΌλ‘œ ν•œμΉΈμ”© 이동
			} 
			arr[idx] = value;    //idx번째 μ›μ†Œμ— κ°’ λ„£κΈ°
		}
		
	}
    
    void remove(int idx) { //μΈλ±μŠ€κ°€ idx인 μ›μ†Œ μ‚­μ œ
		for (int i = idx; i < arrSize-1; i++) { //idxλΆ€ν„° λ§¨λ’€μ—μ„œ 2번째 μ›μ†ŒκΉŒμ§€
			arr[i] = arr[i + 1];            //μžμ‹  λ‹€μŒμ— μžˆλŠ” μ›μ†Œ μžμ‹ μ—κ²Œ λŒ€μž…
		}
		arr[arrSize - 1] = 0;   //λ§ˆμ§€λ§‰ μ›μ†Œμ— μ΄ˆκΈ°κ°’ 0 λŒ€μž…
	}

	void set(int idx, int value) { //μΈλ±μŠ€κ°€ idx인 μ›μ†Œλ₯Ό value둜 λŒ€μ²΄
		arr[idx] = value;
	}

	void print() {  //λͺ¨λ“  μ›μ†Œ 좜λ ₯
		for (int i = 0; i < arrSize; i++) {
			cout << arr[i] << " ";
		}
		cout << endl;
	}

	
};

좜λ ₯은 μ•„λž˜μ™€ κ°™λ‹€.

1.전체 μ½”λ“œ

#include <iostream>
using namespace std;

class Array {
private:
	int* arr; //λ°°μ—΄, 이후에 동적할당 ν•  것
	int arrSize; //λ°°μ—΄μ˜ 크기

public:
	Array(int size) { //Arrayμƒμ„±μž
		arrSize = size;  //arrSizeλ₯Ό μž…λ ₯받은 κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”
		arr = new int[arrSize]; //arrSize크기의 intν˜• λ°°μ—΄ 동적할당
		for (int i = 0; i < size; i++) { //각 인덱슀 μ›μ†Œλ“€ 0으둜 μ΄ˆκΈ°ν™”
			arr[i] = 0;
		}
	}

	int at(int idx) {  //idxμœ„μΉ˜μ— μžˆλŠ” μ›μ†Œ 리턴
		return arr[idx];
	}

	void add(int idx, int value) { //idxμœ„μΉ˜μ— valueκ°’ μ‚½μž…
		if (idx > arrSize - 1) {  //λ²”μœ„ λ²—μ–΄λ‚˜λ©΄ -1좜λ ₯
			cout << -1 << endl;
		}
		else {
			for (int i = arrSize - 2; i >= idx; i--) { //맨 λ’€μ—μ„œ 2번째 μ›μ†ŒλΆ€ν„° idx번째
				arr[i + 1] = arr[i];                   //μ›μ†ŒκΉŒμ§€ μ™Όμͺ½μœΌλ‘œ ν•œμΉΈμ”© 이동
			}
			arr[idx] = value;    //idx번째 μ›μ†Œμ— κ°’ λ„£κΈ°
		}

	}

	void remove(int idx) { //μΈλ±μŠ€κ°€ idx인 μ›μ†Œ μ‚­μ œ
		for (int i = idx; i < arrSize - 1; i++) { //idxλΆ€ν„° λ§¨λ’€μ—μ„œ 2번째 μ›μ†ŒκΉŒμ§€
			arr[i] = arr[i + 1];            //μžμ‹  λ‹€μŒμ— μžˆλŠ” μ›μ†Œ μžμ‹ μ—κ²Œ λŒ€μž…
		}
		arr[arrSize - 1] = 0;   //λ§ˆμ§€λ§‰ μ›μ†Œμ— μ΄ˆκΈ°κ°’ 0 λŒ€μž…
	}

	void set(int idx, int value) { //μΈλ±μŠ€κ°€ idx인 μ›μ†Œλ₯Ό value둜 λŒ€μ²΄
		arr[idx] = value;
	}

	void print() {  //λͺ¨λ“  μ›μ†Œ 좜λ ₯
		for (int i = 0; i < arrSize; i++) {
			cout << arr[i] << " ";
		}
		cout << endl;
	}


};

int main() {
	Array ar(5);
	ar.add(1, 10); //0 10 0 0 0
	ar.add(1, 20); //0 20 10 0 0
	ar.print();  //0 20 10 0 0 좜λ ₯

	ar.remove(1); //0 10 0 0 0
	ar.print();  //0 10 0 0 0 좜λ ₯

	ar.remove(1); //0 0 0 0 0
	ar.print();  //0 0 0 0 0 좜λ ₯
	
}

2. 좜λ ₯ κ²°κ³Ό

λŒ“κΈ€