당니이
다은이의 컴퓨터 공부
당니이
전체 방문자
오늘
어제
  • 분류 전체보기 (140)
    • Achieved 👩🏻 (14)
      • 생각들 (2)
      • TIL (6)
      • Trial and Error (1)
      • Inspiration ✨ (0)
      • 미국 박사 준비 🎓 (1)
    • Computer Vision💖 (39)
      • Basic (9)
      • Video (5)
      • Continual Learning (7)
      • Generative model (2)
      • Domain (DA & DG) (5)
      • Multimodal (8)
      • Multitask Learning (1)
      • Segmentation (1)
      • Colorization (1)
    • RL 🤖 (4)
    • Autonomous Driving 🚙 (11)
      • Geometry (4)
      • LiDAR 3D Detection (1)
      • Trajectory prediction (2)
      • Lane Detection (1)
      • HDmap (3)
    • Linux (15)
    • PyTorch👩🏻‍💻 (10)
    • Linear Algebra (2)
    • Python (5)
    • NLP (11)
      • Article 📑 (1)
    • Algorithms 💻 (22)
      • Basic (8)
      • BAEKJOON (8)
      • Programmers (2)
    • ML (1)
      • 통계적 머신러닝(20-2) (1)
    • SQL (3)
    • 기초금융 💵 (1)

블로그 메뉴

  • 홈
  • About me

공지사항

인기 글

태그

  • 백트래킹
  • CL
  • NLP
  • pytorch
  • CV
  • 리눅스
  • til
  • Incremental Learning
  • 자료구조
  • Python
  • 알고리즘
  • conda
  • domain generalization
  • continual learning
  • Linux
  • dfs
  • 백준
  • LLM
  • domain adaptation
  • 코딩테스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
당니이

다은이의 컴퓨터 공부

Algorithms 💻

[알고리즘] - 선형배열 (정렬된 리스트에 원소 삽입하기)

2020. 12. 30. 15:02
반응형
✔ 주안점
- 원소가 기존 리스트의 원소보다 가장 크거나 가장 작은경우를 예외로 처리해야 했던 것

💻 부끄러운 내 코드

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
    'Algorithms 💻' 카테고리의 다른 글
    • 자주 쓰이는 기본적인 정규표현식(Regex) 정리
    • [Project Euler] Problem 1 ~ 7번 알고리즘 풀이
    • [알고리즘] - 선형배열(리스트 내 해당 원소의 인덱스 반환)
    당니이
    당니이
    씩씩하게 공부하기 📚💻

    티스토리툴바