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 | for i in range(10): n = int(input()) pw = ['p']+list(input().split()) cn = int(input()) cmd = ['c']+list(input().split()) ll_p = [['p',i+1] for i in range(len(pw))] # 연결 리스트 ll_c = [['c',i+1] for i in 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[0] and 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=' ') for _ in 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 |