while(1) work();
반응형

링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14zIwqAHwCFAYD 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

분류

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
profile

while(1) work();

@유호건

❤️댓글은 언제나 힘이 됩니다❤️ 궁금한 점이나 잘못된 내용이 있다면 댓글로 남겨주세요.

검색 태그