https://school.programmers.co.kr/learn/courses/30/lessons/155652
1. 내가 작성한 코드
def solution(s, skip, index):
arr = []
result = []
for i in range(97,123): #a~z까지 문자열 삽입
arr.append(chr(i)) #아스키코드로 변환
arr = list(sorted(set(arr) - set(skip))) #skip을 제외한 문자열
print(arr)
for i in list(s):
if arr.index(i) + index > len(arr)-1:
if arr.index(i) + index - len(arr) > len(arr) -1:
result.append(arr[arr.index(i) + index - 2*len(arr)])
else: result.append(arr[arr.index(i) + index - len(arr)])
else: result.append(arr[arr.index(i) + index])
return ''.join(result)
arr.index(i) + index , len(arr) 같이 중복되는 단어를 계속 사용해서 코드가 상당히 복잡한데,
이 경우는 변수를 선언해서 코드를 정리하는 것이 나을 거 같다. (귀찮아서 그냥 제출했음)
2. 런타임에러가 발생한 이유
처음에 arr.index(i) + index 가 len(arr) -1 보다 클 경우 - len(arr)를 한 번만 빼는 조건만을 적고 제출했는데
4개의 테스트케이스에서 런타임에러가 발생했다.
나와 같은 방식으로 푸시는 분들도 아마 동일한 에러가 발생했을 텐데,
그 이유는 arr.index(i) + index - len(arr)를 해줘도 len(arr)보다 클 경우가 존재하기 때문이다.
(결론부터 말하자면, 이럴 경우에는 len(arr)를 두 번 빼줘야한다.)
예를 들어 skip에 들어있는 원소가 10개, index가 20이라고 가정한다. 이때, 제일 끝에 위치한 원소를 찾아야한다면
a-z(26)에서 skip 문자열을 빼준 길이가 16이다.
arr.index[끝원소] = 15
index = 20
len(list) = 16
15 + 20 - 16 = 19이므로 list의 길이보다 또다시 크기 때문에 len(list)를 한 번 더 빼줘야한다.
3. 메모
문제를 풀 때, 조건을 잘 고려하는 버릇을 가져야겠다.
'🔅코딩테스트 공부🔅 > ❗프로그래머스(Lv.1)' 카테고리의 다른 글
[프로그래머스] Level1 신고 결과 받기(python) (0) | 2023.02.11 |
---|---|
[프로그래머스] Level1 성격 유형 검사하기(python) (0) | 2023.02.11 |
[프로그래머스] Level1 과일장수(python) (0) | 2023.02.09 |
[프로그래머스] Level1 옹알이(2) (python) (0) | 2023.02.09 |
[프로그래머스] Level1 기사단원의 무기(with python) (0) | 2023.02.08 |
댓글