본문 바로가기

TIL

[TIL 2024. 03. 06]

오늘 한 일

  • 오늘의 코드카타 10문제
  • 알고리즘 세션
  • 알고리즘 세션 복습
  • TIL 작성

 

오늘의 리뷰

1. 알고리즘 세션

(1) desmos: 빅오를 그래프로 볼 수 있음

(2) 가독성이 좋은 코드를 작성하는 꿀팁!

n = 0

n: int = 0

n: str = 0

#위 3개의 결과는 모두 동일
#알기 쉬운 코드 작성을 위해_2번째 추천
#심지어 3번째처럼 해도 파이썬에서는 오류가 나지 않음(파이썬은 관대함!!)


#리스트
array: list(int) = list()

 

(3) set()

  • set()는 중복제거 과정에서 자동정렬함.
  • 즉, 알고리즘 문제를 선형탐색 등으로 풀어서 시간 초과가 난 경우에 -> set을 씌우면 정렬이 되어 답으로 통과되는 경우도 있음.

 

(4) sort sorted 비교

  • sort는 배열 자체를 변화시키고, None을 return함.
  • => 따라서 sort는 변수에 담아서 사용할 수 없고, print도 원래 배열을 해야 sort가 잘 실행됐는지 확인할 수 있음
  • (ex) array.sort()
  • sorted는 배열 자체를 변화시키는 것이 아니고, 정렬한 새로운 배열을 return함.
  • => 그래서 sorted()는 변수에 담아서 사용가능. 원래 array를 print하면 정렬되지 않은 값이 출력됨
  • (ex) sorted(array)

(5) lambda에 대한 결론

  • 한 번 쓰고 말(다시 쓰지 않을) 코드, 간단한 건데 6줄이나 할애하기 싫다 => lambda 사용을 검토 (ex. fire_emoji)
  • lambda = 종이컵 합수 = 1회용 함수 = pep8은 권장하지 않음
  • lambda를 남발하면 가독성이 떨어짐
  • 메모리 효용을 이유로 lambda를 남발하는 것은 어불성설.. 현대 컴퓨터의 발전으로 공간복잡도는 우리에게 큰 제한이 아니기 때문.

(6) binary_search (이분 탐색)

  • 이분탐색 * n번: log2n(밑이 2인 로그)*n (=nlon2n)
  • start, end, mid
  • 탐색 범위를 좁혀가는 원리 => start와 end를 재조정(mid+1, mid-1)
  • Q1.이분탐색 함수 정의시에 start와 end를 각각 0이랑 len(array)-1로 했는데, array[0]과 array[-1]로 해도 상관 없는지?
    => no. 배열의 요소와 인덱스를 잘 구분할 것. 0이랑 len(array)-1은 인덱스. array[0]과 array[-1]은 요소값임.
  • Q2. list = [1, 3, 5, 7, 9, 11, 13]일 때, start와 0과6 , mid는 3. 따라서 array[mid]는 7.
  • => 결론: start, end, mid는 인덱스이고, array[mid]는 요소값.

 

2. 최댓값

  • 백준에서 입력받는 법
  • enumerate() 활용예
  • for i in range()사용시_난 1부터 시작하는게 아직은 덜 헷갈려서 좋음(취향차)

 

3. 수 찾기

  • 이분탐색 => 반드시 정렬이 되어있어야 함
  • 이분탐색 자체가 반씩 범위를 줄여가며 탐색하는 방법인만큼 순서가 정렬되어 있지 않으면 사용불가
  • 이분탐색 코드(체화될 때까지 반복..)

 

4. 색종이

  • 2차원 배열 선언방법
  • 백준에서는 입력을 한 행씩 받음. 따라서 for문으로 N만큼 반복 필요
  • 이중for문

 

5. 랜선 자르기

  • 이분탐색 사용: start, end, mid
  • start = 1 (N이 없는 경우는 없음_문제조건)
  • end = max(arr) = 현재 가지고 있는 가장 긴 랜선
  • mid가 해.
  • len_cnt가 mid로 나눴을 때의 랜선 개수

 

 

(참고: 2~4_백준)

'TIL' 카테고리의 다른 글

[TIL 2024. 03. 08]  (0) 2024.03.11
[TIL 2024. 03. 07]  (0) 2024.03.07
[TIL 2024. 03. 05]  (0) 2024.03.06
[TIL 2024. 03. 04]  (0) 2024.03.04
[TIL 2024. 02. 29]  (0) 2024.02.29