주어진 배열의 크기는 [10000] / 배열 전체 0으로 초기화 / 배열 내 0은 원소가 아니다
명령어는 다음과 같이 총 3가지이다.
at(i): 배열의 인덱스 i에 저장된 양의 정수를 출력. 만약 원소가 없는 인덱스 i값이
주어지면 0을 출력
set(i, X): 배열의 인덱스 i에 저장된 양의 정수를 X값으로 덮어 씌운다. 만약 원소가 없는
인덱스 i값이 주어지면 0을 출력
add(i, X): 배열의 인덱스 i보다 크거나 같은 곳에 저장된 값을 +1 칸 씩 이동 시키고 인덱스
i에 양의 정수 X 를 삽입. 만약 원소가 없는 인덱스 i값이 주어지면 마지막 원소가 있는
바로 다음 인덱스에 양의 정수 X를 삽입 (원소가 없을 경우 첫 번째 인덱스에 삽입)
입력 : 첫 번째 줄에 명령어의 수 M (1 ≤ M ≤ 10,000)이 주어진다. 두 번째 줄부터 M개의 줄에는 명령어가 하나 씩 주어진다 (1 ≤ X ≤ 10,000) (0≤ i < 10,000) (배열 사이즈 N=10,000).
출력
출력해야 하는 명령어가 주어질 때마다 그 결과를 한 줄 씩 출력한다.
#include<string>
#include <iostream>
using namespace std;
class Array {
private:
int* arr; //배열
int arrSize; //배열의 크기
public:
Array(int size) { //Array 생성자
this->arrSize = size;
this->arr = new int[arrSize];
for (int i = 0; i < size; i++) { //각 인덱스 원소들 0으로 초기화
arr[i] = 0;
}
}
int at(int idx) { //idx위치에 있는 원소 리턴
if (arr[idx] == 0) {//if 문 자리에 0 대신 NULL 을 넣어도 안 된다. 미치겠네.
return 0;
}
return arr[idx];
}
void add(int idx, int value) { //idx위치에 value값 삽입
if (arr[idx] == 0){//if 문 자리에 0 대신 NULL 을 넣어도 안 된다.
while (true) {
if (arr[idx - 1] != 0) {
arr[idx] = value;
break;
}
--idx;
}
}
else{
for (int i = arrSize - 2; i >= idx; i--) { //맨 뒤에서 2번째 원소부터 idx번째
arr[i + 1] = arr[i]; //원소까지 왼쪽으로 한칸씩 이동
}
arr[idx] = value; //idx번째 원소에 값 넣기
}
}
void set(int idx, int value) {//인덱스가 idx인 원소를 value로 대체
if (arr[idx] != 0) {//여기도 마찬가지.
arr[idx] = value;
}
else {
arr[idx] = value;
cout << "0" << endl;
}
}
};
int main() {
int a = 0;
int b = 0;
int M = 0;
string enter;
cin >> M;
Array one(10000);
for (int i = 0; i < M; i++) {
cin >> enter;
if (enter == "at") {
cin >> a;
cout << one.at(a) << endl;
}
if (enter == "set") {
cin >> a;
cin >> b;
one.set(a,b);
}
if (enter == "add") {
cin >> a;
cin >> b;
one.add(a, b);
}
}
}
댓글 0