내일배움캠프_데이터분석_2기/TIL

[TIL] camp_day19_240510

단ee 2024. 5. 10. 20:49

4주차 마지막 날. 오늘은 ADsP 공부로 하루가 다 가버렸다. 주말에 못한 공부를 해야한다...

학습 내용


  1. 비트 연산자!(SQL)

    • 프로그래머스_특정 형질을 가지는 대장균 찾기
    • 드디어 해결했다!
    • 비트연산자란) 컴퓨터에서 비트 단위로 연산을 수행하는 연산자, 논리연산자와 비슷하다.
      • & : 두 비트가 모두 1일 때 결과가 1(True)
      • | : 두 비트 중 하나라도 1일 때 결과가 1(True)
      • ~ : 비트 반전
      • ^ : 두 비트가 다르면 결과가 1(True)
    • 코테에서 주어진 테이블 중 genotype(유전형) 을 이진법으로 나타낸 수를 기준으로 특정 형질을 가지고 있는지 여부를 표시한다.
    • 십진법은 10을 기준으로 단위가 바뀌고, 이진법은 2를 기준으로 단위가 바뀐다.
    • 오른쪽에서 첫 번째 자리는 2의 0승 = 1 이고, 두 번째 자리는 2의 1승 = 2, 11(2) 는 10진법 기준 숫자 3(2^1 + 2^0 = 2 + 1 = 3)
    • 문제에서 요구하는 건 2번 형질이 없고 = 10(2) 이 아닌 수, 즉 2(10) 가 아닌 수. 1101(2) 라던가, 101(2) 는 True
    • 1번이나 3번 형질이 있는 수 = 101(2), 즉 5(10) 와 비트가 같은 수.
        SQL
        SELECT COUNT(ID) as COUNT
        FROM ECOLI_DATA
        WHERE NOT GENOTYPE & 2
            and GENOTYPE & 5
    • 또 다른 문제 프로그래머스_Front End 개발자 찾기
    • 풀이 과정 : Front end 조건에 맞는 값을 찾아 전부 더하고(sum),
      서브쿼리에 넣은 다음 이걸 where 절 조건으로 넣어서 비트연산자(&) 써서 금방 풀었다.
        SQL
        SELECT ID
        ,EMAIL
        ,FIRST_NAME
        ,LAST_NAME
        FROM DEVELOPERS
        WHERE SKILL_CODE &
        (
         SELECT sum(CODE)
         FROM SKILLCODES
         WHERE CATEGORY = 'Front End'
         )
        ORDER BY ID
  2. Pythonic 한 코드를 찾아가는 여정(Python)

    • try:, except: 예외 처리할 때 자주 사용하는 구문.
      try: 했을 때 오류가 발생하면 except: 아래의 코드가 실행된다. 특정 오류가 발생할 경우 다음 코드가 실행되도록 할 수도 있다.

    • 문제 : 프로그래머스_문자열 다루기 기본

        Python
        # 첫 번째 코드
        # 73% 만 통과, 나머지는 실패함.
        def solution(s):
            if len(s) == 4 or len(s) == 6:
                try:
                    int(s)
                    return True
                except:
                    return False
        Python
        # 두 번째 코드
        # 길이가 4 또는 6이 아닌 배열에 대해서 False 출력해줘야 해서 첫 번째 코드가 오답이었던 것.
        def solution(s):
            if len(s) == 4 or len(s) == 6:
                try:
                    int(s)
                    return True
                except:
                    return False
            else:
                return False
        Python
        # 세 번째 코드
        # .isdigit() 이라는 메서드가 존재 : string 에 대해 전부 숫자로 이루어져있다면 True 출력
        def solution(s):
            if len(s) == 4 or len(s) == 6:
                return s.isdigit()
            else:
                return False
        Python
        # 네 번째 코드
        # 더 Pythonic 하게 안 될까 하다가 고민해서 작성해보았다.
        # 첫 번째 코드와 비교하면 훨씬 짧고, 간단하고, 이해하기 좋다!!
        def solution(s):
            if len(s) in [ 4, 6 ]:
                return s.isdigit()
            else:
                return False
  3. Pythonic 한 코드를 찾아가는 여정_part.2(Python)

    • datetime 모듈 사용

    • 문제 : 프로그래머스_2016년

    • GPT 한테 하나씩 물어가면서 작성한 첫 번째 코드와 다른 사람 정답 보면서 수정한 두 번째 코드.

    • 내 코드리뷰를 하는 게 참 중요하다 생각했다.

    • 다음 번에 datetime 안 쓰고 다시 풀어봐야겠다.

      Python
      # 첫 번째 코드
      from datetime import datetime
      def solution(a, b):
          date_str =f"2016-{a}-{b}"
          date_ojt = datetime.strptime(date_str, "%Y-%m-%d")
          d = date_ojt.weekday()
          names = ["MON","TUE","WED","THU","FRI","SAT","SUN"]
          return names[d]
      Python
      # 좀 더 Pythonic 하게 수정해봤다.
      from datetime import datetime
      def solution(a, b):
        d = datetime(year=2016, month=a, day=b).weekday()
        names = ["MON","TUE","WED","THU","FRI","SAT","SUN"]
        return names[d]

고찰 & 기타


  • 코테 풀면서 유전형이라는 단어가 나왔는데, 너무 오랜만에 들어서 반가웠던... 전직 생물학도(복수전공)...

  • 드디어 어제 미뤄뒀던 비트연산자 공부를 했다! 개념도 대충은 머리에 들어왔다!

  • 코테를 풀 때 한 번에 Pythonic 한 코드를 쓰는 게 아직은 좀 어렵다. 점차 코드를 개선해나가면서 최종적으로는 실력을 올려야겠다.

  • Leetcode에서 SQL 50 챌린지를 시작했다. 지금 SQL 코딩테스트를 꽤 많이 풀어서 28/50 까지 왔다.
    SQL 50

  • 프로그래머스 SQL 챌린지도 몇 문제 안 남았길래 차근차근 채울 생각이다.

'내일배움캠프_데이터분석_2기 > TIL' 카테고리의 다른 글

[TIL] camp_day21_240514  (0) 2024.05.14
[TIL] camp_day20_240513  (0) 2024.05.13
[TIL] camp_day18_240509  (0) 2024.05.09
[TIL] camp_day17_240508  (0) 2024.05.08
[TIL] camp_day16_240507  (0) 2024.05.07