오른쪽으로 이동하는 개미(ants[i][1])의 경우, 내 오른쪽 ants[i+1][1] 이 나랑 같이 ‘1’인지 확인한다.
만약, 내 오른쪽 개미가 0에 해당된다면, 다른 방향의 개미이므로 (i,i+1) 를 change_set에 저장
tuple[1]원소가 0인 경우 : right→left으로 이동하는 개미
왼쪽으로 이동하는 개미(ants[i][1])의 경우, 내 왼쪽 ants[i-1][1] 이 나랑 같이 ‘0’인지 확인한다.
만약, 내 오른쪽 개미가 1에 해당된다면, 다른 방향의 개미이므로 (i-1,i) 를 change리스트에 저장
change_set
배열이 아니라 set()으로 관리해서 ,바뀔 좌표의 중복을 차단했다. (왼→오 로 탐색하는 경우와 오→왼 으로 탐색하는 경우 모두에서 중복 허용해서 넣어준다면, 제자리로 돌아오는 불상사 발생하기 때문에)
시도1 - 런타임 에러
n1,n2 = map(int,input().split())
left = input()
left = left[::-1]
right = input()
T =int(input())
ants = []
for i in range(n1):
ants.append((left[i],0))
for i in range(n2):
ants.append((right[i],1))
for time in range(T):
change_set = set()
for i,tup in enumerate(ants):
if tup[1] == 1: #왼쪽으로 이동하는 개미들
if ants[i-1][1] != 1:
change_set.add((i-1,i))
else:
continue
elif tup[1] == 0: #오른쪽으로 이동하는 개미들
if ants[i+1][1] != 0:
change_set.add((i,i+1))
else:
continue
for i,j in change_set:
ants[i],ants[j] = ants[j],ants[i]
result =[tup[0] for tup in ants]
print(''.join(result))
런타임에러 발생한 이유는 다음과 같다
인덱스 범위 초과: 코드가 리스트 ants의 인덱스를 접근할 때 범위를 벗어날 수 있음.
특히i+1이나 i-1 접근 시 리스트의 경계를 넘는 경우 런타임 에러가 발생
T = 0일 때 예외 처리 없음: T가 0일 때 예외처리 생략 ( 문제 조건에 T=0인 경우도 포함)
개미가 리스트의 양 끝에 있는 경우 처리 필요: i가 0이거나 i가 리스트의 마지막 인덱스일 때, i-1이나 i+1 접근 시 문제가 생긴다
⇒ 리스트 인덱스로 접근할 때, 큰 맥락에서 범위 벗어지 않도록 처리하는거 계속 까먹는데, 앞으로 더 주의하자
왼→오로 갈 때, 전체 리스트 범위 초과하지 않는지
오 → 왼으로 갈 때, 0보다 작아지지 않는지
시도2) 성공
n1,n2 = map(int,input().split())
left = input()
left = left[::-1]
right = input()
T =int(input())
ants = []
for i in range(n1):
ants.append((left[i],0))
for i in range(n2):
ants.append((right[i],1))
if T == 0:
result =[tup[0] for tup in ants]
print(''.join(result))
else:
for time in range(T):
change_lst = set()
for i,tup in enumerate(ants):
if tup[1] == 1: #왼쪽으로 이동하는 개미들
if i > 0 and ants[i-1][1] != 1:
change_lst.add((i-1,i))
else:
continue
elif tup[1] == 0: #오른쪽으로 이동하는 개미들
if i < len(ants) - 1 and ants[i+1][1] != 0:
change_lst.add((i,i+1))
else:
continue
for i,j in change_lst:
ants[i],ants[j] = ants[j],ants[i]
result =[tup[0] for tup in ants]
print(''.join(result))