반응형
링크
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14zIwqAHwCFAYD
분류
Linked List
개인적 난이도
매우 쉬움 | 보통 | 보통 | 어려움 | 매우 려움 |
핵심 알고리즘
배열 중간중간에 삽입이 빈번하게 일어나기 때문에 Linked List를 사용하여야 한다.
암호문 맨 뒤에 삽입해야 하는 경우도 있기 때문에 Linked List의 tail을 저장해둔다.
그 외에는 그냥 지시문에서 시키는대로 구현하면 된다.
시행착오
없음
코드
#include <iostream>
using namespace std;
struct Node{
int v = 0;
Node* next = 0;
};
Node *firstNode = 0, *lastNode = 0;
void append(int v){
Node* n = (Node*)malloc(sizeof(Node));
n->v = v;
if (!firstNode){
firstNode = n;
}else lastNode->next = n;
lastNode = n;
}
Node* get(int x){
Node* n = firstNode;
for (int i = 0; i < x; i++) n = n->next;
return n;
}
Node* insert(Node* prev, int v){
Node* n = (Node*)malloc(sizeof(Node));
n->v = v;
n->next = prev->next;
prev->next = n;
return n;
}
int main(){
int tc;
//freopen("input.txt", "r", stdin);
for(int tc = 1; tc <= 10; ++tc){
int N;
firstNode = 0;
append(-1); //fakeNode
scanf("%d", &N);
for (int i = 0; i < N; i++){
int v;
scanf("%d", &v);
append(v);
}
scanf("%d\n", &N);
for (int i = 0; i < N; i++){
char comm;
int x;
scanf("%c", &comm);
scanf("%d", &x);
if (comm == 'I'){
Node* n = get(x);
scanf("%d", &x);
for (int j = 0; j < x; j++){
int v;
scanf("%d", &v);
n = insert(n, v);
}
}else if (comm == 'A'){
for (int j = 0; j < x; j++){
int v;
scanf("%d", &v);
append(v);
}
}else{
int y;
scanf("%d", &y);
Node* n1 = get(x);
Node* n2 = n1;
for (int i = 0; i < y; i++) n2 = n2->next;
n1->next = n2->next;
}
scanf("%c", &x);
}
Node* n = firstNode;
printf("#%d", tc);
for (int i = 0; i < 10; i++){
n = n->next;
printf(" %d", n->v);
}
printf("\n");
}
return 0;
}
반응형
'알고리즘 > SW Expert Academy' 카테고리의 다른 글
4408. 자기 방으로 돌아가기 (0) | 2022.02.16 |
---|---|
1970. 쉬운 거스름돈 (0) | 2022.02.16 |
3316. 동아리실 관리하기 (0) | 2022.02.16 |
10726. 이진수 표현 (0) | 2022.02.16 |
1288. 새로운 불면증 치료법 (0) | 2022.02.16 |