https://swexpertacademy.com/main/solvingProblem/solvingProblem.do

SWEA에서 암호문 8 풀고있는데 입력값이 너무 많은것 같아서 연결리스트로 풀어보려고 했음

대충 문제를 요약하자면 어떤 숫자들의 배열이 주어지고

그 다음 커맨드 문자열이 주어지는데

문자열은

I x y s : x위치 다음에 숫자 배열 s를 삽입 ( y는 배열의 길이)

D x y : x 위치 다음에 숫자를 y개 만큼 삭제

A y s : 배열 맨 마지막에 숫자 배열 s를 삽입 (y는 배열 길이)

이렇게 됨


그래서 기존 문자열 PW와 명령어 문자열 COM 을 입력받고 각각 다음 인덱스를 가리키는 연결리스트를 2개씩 만들었음

그리고 COM을 읽으면서 x를 가지고 타겟을 찾고, 명령을 실행했음

I 이면 타겟의 다음 노드를 COM에 주어진 문자열을 가리키도록 만들고 삽입될 문자열의 마지막은 다시 기존에 가리키던 위치를 가리키도록 했고

D 이면 타겟의 다음 노드를 y개만큼 지난 그 다음 노드를 가리키도록 했고

A 이면 마지막 노드가 가리키는 노드를 주어진 문자열을 가리키도록 만들었음


내가 패드로만 공부해야해서 인터넷 파이썬 컴파일러를 이용하는데 주어진 예제 입력을 입력하면은 하루종일 입력하다가 오류가 나더라고

그래서 내가 일단 예제를 몇개 만들어서 넣으면 잘 작동한단 말임?

근데 제출하면 죄다 틀렸다고 나옴.. 이유를 모르겠으니까 정신 나갈거같은데 좀 도와주셈..

아래는 내 코드임


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
forin range(10):
  n = int(input())
  pw = ['p']+list(input().split())
  cn = int(input())
  cmd = ['c']+list(input().split())
 
  ll_p = [['p',i+1forin range(len(pw))] # 연결 리스트
  ll_c = [['c',i+1forin range(len(cmd))]
 
  ind = 1
  lastNode = ['p'len(pw)-1]
  while ind < len(ll_c):
    commands = cmd[ind]
    target = ['p'1]
    if commands != 'A':
      x, y = int(cmd[ind+1]), int(cmd[ind+2])
      for cnt in range(x-1):
        if target[0== 'p':
          target = ll_p[target[1]] # ['p', 다음목표인덱스]
        else:
          target = ll_c[target[1]] # ['c', 다음목표인덱스]
      if commands == 'I'# I 인 경우 타겟의 다음 노드를 입력받은 문자열의 시작지점으로 지정함
        if target[0== 'p':
          ll_c[ind+2+y] = ll_p[target[1]] # 삽입되는 문자열의 끝부분은 다시 기존 배열을 가리킴
          ll_p[target[1]] = ['c', ind+3]
        else:
          ll_c[ind+2+y] = ll_c[target[1]]
          ll_c[target[1]] = ['c', ind+3]
        ind = ind+3+y
      elif commands == 'D':
        next = target
        for cnt in range(y):
          if next[0== lastNode[0and next[1== lastNode[1]:
            lastNode = target # 만약 기존 배열 끝까지 삭제하면 끝 노드는 타겟을 가리킴
            break
          if next[0== 'p':
            next = ll_p[next[1]]
          else:
            next = ll_c[next[1]]
        if target[0== 'p':
          ll_p[target[1]] = next
        else:
          ll_c[target[1]] = next
        ind = ind+3
    else# 'A' 인 경우
      y = int(cmd[ind+1])
      if lastNode[0== 'p':
        ll_p[lastNode[1]] = ['c', ind+2# 마지막 노드가 주어진 문자열을 가리키도록 설정
      else:
        ll_c[lastNode[1]] = ['c', ind+2]
      lastNode = ['c', ind+2+y] # 주어진 문자열의 마지막 부분이 마지막 노드가 됨
      ind = ind+2+y
  next = ['p',1]
  print(f"#{i+1}", end=' ')
  forin range(10):
    if next[0== 'p':
      print(pw[next[1]], end=' ')
      next = ll_p[next[1]]
    else:
      print(cmd[next[1]], end=' ')
      next = ll_c[next[1]]
  print('')
cs