✔ 주안점
- 원소가 기존 리스트의 원소보다 가장 크거나 가장 작은경우를 예외로 처리해야 했던 것
💻 부끄러운 내 코드
def solution(L, x):
last = int(len(L)-1)
for i in range(last):
if int(L[i]) < int(x) < int(L[i+1]): # 사이에 있는 경우
L.insert(i+1, x)
break
# 삽입 원소가 가장 작은 경우, 가장 큰 경우 예외로 처리
else:
if x > int(max(L)) :
L.insert(int(len(L)), x)
break
elif x < int(min(L)):
L.insert(0, x)
break
else:
pass
return L
✔ 문제점
- 단순 if와 else를 반복한 코드임. 너무 길고 불필요함.
- index위치를 명확히 인지하지 못하고 그냥 i를 막 때려맞춘 것 같음
✔ 다른 풀이
1. for문을 이용하되 조금 더 간단하게 작성(append이용)
def solution(L, x):
if x > L[-1]:
L.append(x) # 가장 큰 원소 append처리
else:
for i in range(len(L)):
if x <= L[i]:
L.insert(i, x)
break # 어차피 처음보다 큰 원소 나오면 break 됨
return L
- max와 min을 따로 if/elif로 판단할 필요가 없음. 그냥 max부분은 append로 처리하고, min은 저 for문 하나로 다 해결
2. for과 if문 한줄에 쓰기(반복문 한줄에 쓰기)
def solution(L, x):
A = [i for i in range(len(L)) if x-L[i]>0] # x보다 작은 수를 가진 리스트 요소 모음
L.insert(len(A), x)
return L
- insert 위치를 주의해야함. len(A)는 x보다 작은 원소들의 개수임. insert위치는 맨처음 0부터 세므로 len도 가능
3. enumerate 이용
- enumerate : 반복문 사용 시 몇번째 반복문인지 확인(튜플형태로 반환)
# 예시)
t = [10, 40, 22, 11, 55]
for p in enumerate(t):
print(p)
# output
# (0, 10), (1, 40), (2, 22), (3, 11), (4, 55)
enumerate를 이용해 삽입 위치를 쉽게 찾자!
def solution(L, x):
for idx, num in enumerate(L):
if num > x:
L.insert(idx, x) # 삽입 위치를 idx로 처리
break
if L[-1] < x:
L.append(x) # max 예외는 역시 append 사용
else:
pass
return L
4. 다른 사기적인 방법(sort 이용)
def solution(L, x):
L.append(x)
L.sort() # 그냥 append한 다음 한번에 sort...
return L
def solution(L, x):
return sorted(L + [x])
반응형
'Algorithms 💻' 카테고리의 다른 글
자주 쓰이는 기본적인 정규표현식(Regex) 정리 (0) | 2021.04.19 |
---|---|
[Project Euler] Problem 1 ~ 7번 알고리즘 풀이 (0) | 2021.02.24 |
[알고리즘] - 선형배열(리스트 내 해당 원소의 인덱스 반환) (0) | 2020.12.30 |