📖What I learned

  1. 파이썬엔 in/not in 같은 아주 좋은 키워드가 있으니까 그거 사용하자
  2. Counter는 존재하지 않는 키에 대해 KeyError가 아니라 0을 return
  3. sum() 을 bool 타입의 데이터와 쓰면 True의 개수를 return
Link to original

📖What I learned

  1. 차근차근 생각한 걸 그대로 코드로 옮기면 다 풀 수 있다
  2. 딕셔너리를 잘 활용하자 (ex. {문자:마지막 발견 인덱스}에 저장 → 현재 포인터보다 같거나 크면 중복)
Link to original

📖What I learned

  1. zip() 사용 시 두 iterable의 수가 맞지 않는다면 앞에서부터 순서대로 더 작은 개수를 가진 iterable의 수만큼 zip 된다는 것
  2. 탐색이 많이 필요한 문제에 해시 테이블을 사용하자
  3. Counter 객체끼리는 빼기 연산이 가능 (심지어 dictionary처럼 key, value 각각 접근도 가능)
Link to original

📖What I learned

  1. startswith() 에 대해 알게 되었따!
  2. 문자열을 요소로 가진 리스트를 정렬하면 문자열을 사전순으로 나열(알고 있지만 착각하기 쉬움)
Link to original

📖What I learned

  1. 수학 경우의 수를 오랜만에 떠올렸다 ㅎㅎ; ;
  2. sum()은 자주 활용하는데 prod() 은 자주 까먹어 기억하쟈

prod()

import math 주어진 iterable에 대해서 모든 요소에 대해 곱셈을 계산해 반환

Link to original

📖What I learned

  1. lambda 정렬 식 헷갈리던 것이 정리되었다
  2. dict의 value가 list일 때 그 value(list)를 정렬하고 싶다면??? → key로 접근해서 그 key의 value를 정렬해야 함 sorted(dict[key]) 이렇게 정렬하기
Link to original

📖What I learned

  1. 파이썬에서 우선순위 큐를 사용할 때 heapq 모듈을 활용한다!
Link to original

📖What I learned

  1. slicing을 하려는 sequence가 비어있다면 그냥 빈 sequence를 return함!!
Link to original

📖What I learned

  1. 작업들의 순서에 대한 언급이 있다면 stack, queue를 생각하자!
Link to original

📖What I learned

  1. any와 같은 필터를 잘 사용하면 코드가 훨씬 깔끔해짐
  2. heapq 모듈은 최소힙 구현 → 순서유지 X
Link to original

📖What I learned

  1. 길이를 유지해야 하는 상황일 때는 0과 같은 기본 값을 넣어서 길이를 유지해주자
  2. queue를 사용할 때는 확실히 deque()가 훠어얼씬 빠르다

list.pop(0) : O(n) deque.popleft() : O(1)

Link to original
Transclude of 주식가격#what-i-learned

📖What I learned

  1. 정규표현식 표현들을 잘 알아두자!!

    📎 re.sub(pattern, replace, str, cnt)

    문자열에서 정규 표현식 패턴에 해당하는 값을 다른 값으로 치환하는 정규 표현식 함수

    다양한 정규 표현식 패턴 표현

    패턴설명
    ^이 패턴으로 시작해야 함
    $이 패턴으로 종료되어야 함
    [chars]문자들 중 하나여야 함
    가능한 문자들의 집합을 정의
    [^chars]아니어야 할 문자들의 집합을 정의
    [a-d]해당 문자 사이 범위에 속하는 문자들의 집합을 정의
    [^a-d]해당 문자 사이 범위에 속하지 않는 문자들의 집합을 정의
    Link to original
Link to original

📖What I learned

  1. Dictionary의 key에는 immutable 객체만 들어올 수 있음 → list는 불가 (그래서 string으로 바꿔주었음)
  2. sorted()를 써서 정렬하면 list 형태로 정렬된 데이터를 return (a.sort()는 반환값 없음)
Link to original

📖What I learned

  1. 딕셔너리 (aka. hash table)은 정말 빠르당
Link to original

📖What I learned

  1. permutation 객체는 iterable한 객체라 반복문에 사용 가능
Link to original

📖What I learned

  1. 이런 시간 관련 문제는 시간 전체를 루프 돌지 않아도 조건(?)만큼만 루프를 돌아 시간을 루프 안에서 따로 처리할 수도 있음
Link to original

📖What I learned

  1. 다른 사람들을 보니까 visited를 땅 크기만큼으로 해서 T/F를 체크한 게 아니라 그냥 빈 리스트를 visited로 두고 방문하면 해당 위치를 append하고 in으로 체크하네??? 이러면 탐색 순서도 알 수 있어서 더 좋은 듯
  2. 중복 제거 == Set
Link to original

📖What I learned

  1. 가장 기본적인 형태의 BFS/DFS 코드 → 생각이 나지 않을 땐 이 코드를 보자⭐️
Link to original

📖What I learned

  1. 문제를 꼼꼼히 읽자 ㅎㅎ ;;
Link to original

📖What I learned

  1. 올림 함수 : ceil(v) (from math import ceil) (아니면 import math해서 math.ceil(v))
  2. 예외처리를 잘하자 코테에선 테케가 많이 안 주어지니까 특수상황의 테케도 평소 생각해보는 습관을 길러야 할 듯!!!

⭐️기록되지 않은 23:59의 출차 처리

첫 생각

이전 입/출차 기록이 어떻든 마지막 출차 기록이 없다면(최종 출차가 없고 입차가 마지막 기록이라면) 누적 주차 시간이 마이너스 → 조건문을 누적 주차 시간이 마이너스이거나 입차 기록만 있는 상황(records의 길이가 1)일 때로 한정함

테케로 얻은 힌트

근데??? 입차 시간이00:00인 정보만 존재하는 테케에서 걸렸어 → 해당 조건문대로면 얜 기본 요금만 내고 나가 하루 웬종일 주차했는데 ;;; → 어떤 입/출차 기록을 가졌든 누적 주차 시간이 0일 수는 없어. 절.대.로. 그러니까? 굳이 다른 조건을 더 따지지 않아도 누적 주차 시간이 0보다 작으면 ??? 마지막 출차 정보가 없는 것

한 줄 요약 : 처음에는 최종 출차 정보가 없으면 <0이라고만 생각했는데 알고보니 0이였다

Link to original

📖What I learned️

  1. 주고받은 선물 체크할 2차원 리스트, 선물 지수를 담은 리스트를 만들었어야하는데 각 사람의 이름은 인덱스가 될 수 없으니 인덱스 정보를 처리해줬어야 함 이 때 인덱스 처리를 잘했당 ㅎㅎ 순서대로 이름을 key, 인덱스를 value로 가지는 딕셔너리를 만들어서 인덱스를 아주 잘~ 기록해줬어!!
Link to original

📖What I learned

  1. 진짜 제발!!! 문제를 꼼꼼히 읽자!!!!!!!!
Link to original

📖What I learned

  1. 딕셔너리를 in 연산자로 비교한다면 해당key가 딕셔너리 안에 있는지 조사 → 굳이 dic.keys()해서 비교하지 않아도 된다!!
  2. 바보같이 시간을 카운터 객체로 열심히 줄여놓고 무게가 있는지 없는지를 weights 리스트에서 비교했었다 ;; 카운터는 딕셔너리 + 겹치는 무게는 1개로 통일돼서 value로 카운트 됐으니까 당연히 카운터로 존재유무 파악하는 게 훠어어어얼씬 빠름
Link to original

📖What I learned

  1. n항을 구하기 위해 n-1항 이하의 결과가 반복적으로 사용될 때 dp를 까먹지 말자!!!

dp 문제 구별 방법

  1. 문제를 같은 형태의 문제로 나눌 수 있음?
  2. 하위 문제의 계산이 반복됨?
  3. 최적화 or 최대/최소화 or 특정 잡업의 경우의 수를 구하는 유형의 문제임? → 1, 2만으로 헷갈리면 3번 참고
Link to original

📖What I learned

  1. 중복되는 변수들을 잘 정리해서 중복을 제거해주자
Link to original

📖What I learned

  1. 조건이 조금 더 붙은 클래식한 투포인터 문제 → 투포인터 연습할 때 참고하기!
  2. 시간복잡도를 잘 계산하자!
  3. 반복문 조건이 애매했는데 처음엔 그냥 for문으로 st한 번 en이 한 번씩 각각 끝까지 돌면 2n이니까 for문으로했는데 이러니까 계속 예외처리도 해줘야하기도 하고 while 문으로 둘 다 n보다 작을 때로 하면 더 직관적인 것 같아서 수정! 이렇게 while문으로 하면 st의 경우에는 반복문 내에서는 범위 확인하지 않아도 됨. 왜냐면 n을 넘어도 초과된 인덱스의 요소는 사용하지 않는데다가(값을 제거함) 다음 루프에서 자동으로 조건 체크됨 en은 확인 필요함 오른쪽 인덱스 얘는 값이 추가되는 것
Link to original

📖What I learned

  1. 수학적 지식도 잘 활용하자

tip

queue1과 queue2의 원소는 정수이므로, 두 큐의 총합인 홀수인 경우는 무슨 짓을 해도 서로의 값이 같아질 수 없다. 즉 -1을 반환한다. ex) queue1의 합이 20 queue2의 합이 21이라면, 서로의 총합이 같아지기 위해선 총합이 20.5여야 한다. 큐는 정수로만 이루어져 있어서 총합이 소수점으로만 나타난 경우는 발생할 수 없다.

Link to original

📖What I learned

  1. 필터 함수와 람다식을 자유자재로 사용할 수 있도록 공부하자!
Link to original

📖What I learned

  1. 정규식을 매번 까먹는다! ㅜㅜ re.sub(pattern, replace, str)
  2. strip 함수는 문자열이 아니라 문자클래스가 파라미터로 들어감 (양 끝 문자 클래스에 해당하는 문자들 제거하는 함수)
Link to original

📖What I learned

  1. 복잡해 보여도 순서대로 차근차근 풀어가면 문제 없다!
Link to original

📖What I learned

  • 행렬 곱은 행 하나 열 하나 순서대로 요소오소 곱해서 더하기!!!!!! 를 기억하자~~~~
  • 행렬 곱은 1번의 행 길이 2번의 열 길이 동일해야 할 수 있다는 것도 기억하장
Link to original

📖What I learned

  1. 파이썬의 bool타입은 int에서 파생된 클래스라서 연산 가능 → True 1 False 0으로 취급되어 계산됨
Link to original

📖What I learned

  1. visited 탐색 시간 줄이기 위해선 list가 아니라 set을 염두에 두자! 여기선 디렉션 최대가 500이라서 시간복잡도 문제는 없었지만 set으로 선언할 시 눈에 띄는 수행 시간 감소)
  2. 이미 방문한 길을 반대 방향에서 걸어온다고 다른 길이 아니다! 디테일함을 체크하자 제발!!!!(UDU = 1)
Link to original

📖What I learned

  1. Counter 객체끼리 덧셈, 뺄셈, 집합 연산 등 연산이 가능!!!!!!!!
Link to original

📖What I learned

  1. 리스트가 시간 초과가 나면 꼭 딕셔너리를 생각해보자!!!
Link to original

📖What I learned

  • string += 연산보다 list로 만들어 append하고 나중에 ''.join() 연산이 더 빠르다는 것을 알아두자
  • 소수 구할 때 시간 줄이기!! → n까지 나눠보는 것이 아니라 n의 제곱근까지만 나눠보면 됨!!
Link to original

📖What I learned

  1. 최대공약수는 math의 gcd함수로 ! 최소공배대는 a*b // gcd(a, b)로!
Link to original

📖What I learned

  • 완전 기본적인 dp 문제!
Link to original

📖What I learned

  • 파이썬의 heapq는 값이 변할 땐 재정렬이 되지 않고 push, pop, replace 같은 함수 연산이 발생할 때만 정렬이 되어 최솟값이 고정됨!
  • heapq로 pop → push한다면 heapq.replace(list, v) 라는 함수가 있음!
Link to original