[TIL]24-12-01

김슬아·2024년 12월 1일

📅 오늘의 기록 (2024.12.01)

🚀 오늘 한 일


🧐 새롭게 알게 된 것

  • 핵심 포인트

    • 파이썬 set() 함수의 시간 복잡도는 O(1) 이다.
    • 변수 재할당하는 것 비용 아끼려다 기본 논리를 무시하지 말자.
  • 활용 방법

    • 오늘 풀었던 백준 문제이고 처음에 리스트로만 풀었었다가
      시간초과가 나서, 시간 복잡도가 1인 set 함수로 바꿨더니 통과가 되었다.

      import sys
      input = sys.stdin.readline
      N=int(input())
      cards=set(input().split())
      M=int(input())
      ans=input().split()
      
      for i in range(M):
          if ans[i] in cards:
              ans[i]="1"
          else:
              ans[i]="0"
      
      print(*ans)
    • 프로그래머스 기출문제 중 하나였다.
      첫번째 바보짓: 테스트 케이스 ext라는 변수를 재사용하려다가 for문이라는 걸 까먹고
      ext가 덮어씌워져도 괜찮다고 착각을 했다.
      이렇게되면 첫번째 for문에 덮어씌워진 값이 두번째 for문 부터는 모든 if 문 자체에 들어가지 않아 계속 같은 값만 나오게 된다..
      두번째 바보짓: 문제 제한 사항 중

      이렇게 써져있는 걸 못봐서 부랴부랴 4가지 경우에 대한 if 문을 만들어주었고, ext는 date 고정인 걸로 착각해서 이것도 if 문으로 만들어주니까 통과가 되었다.

      data=[[1,20300104,100,80],[2,20300804,847,37],[3,20300401,10,8]]
      # 이렇게 되면 ext 자체가 정수값으로 덮어씌워져서 if문 자체가 안돈다.
      # 그래서 새로운 변수에 data값을 할당해줘야한다.
      def solution(data, ext, val_ext, sort_by):
          answer = []
          for i in range(len(data)):
              if ext=="remain":
                  ext = data[i][3]
              elif ext=="maximum":
                  ext = data[i][2]
              elif ext=="date":
                  ext = data[i][1]
              elif ext=="code":
                  ext = data[i][0]
              print(ext)
              if ext <val_ext:
                  answer.append(data[i])
          if sort_by=="remain":
              answer = sorted(answer,key=lambda x:x[3])
          elif sort_by=="maximum":
              answer = sorted(answer,key=lambda x:x[2])
          elif sort_by=="date":
              answer = sorted(answer,key=lambda x:x[1])
          elif sort_by=="code":
              answer = sorted(answer,key=lambda x:x[0])
          return answer
      
      print(solution(data,"date",20300501,"remain"))

❓ 고민거리 및 궁금한 점

  • 알고리즘 풀이에 적용하기 위한 파이썬 함수 중 시간복잡도가 상수시간이거나 logn 시간인 것들을 한번 알아봐야겠다.
  • 알고리즘 문제 다른 풀이방법도 고민해봐야겠다. 문제 유형을 보니 이분탐색으로도 풀수있는거 같던데..
  • 문제를 꼼꼼히 안읽고 넘어가는 게 버릇이 된것같다.. 글이 잘 안읽힌다. 책을 좀 읽으면서 문해력을 높여보도록 노력해봐야겠다.

💡 내일의 목표

  • 알고리즘 1문제 풀이
    -스마게 데브 캠프 지원서 작성
    -코드잇 프론트엔드 단기 심화 과정 지원서 작성

📝 코드/참고 자료


profile
개발자/디자이너 둘다 잘하고싶은 코린이

0개의 댓글