4주차 마지막 날. 오늘은 ADsP 공부로 하루가 다 가버렸다. 주말에 못한 공부를 해야한다...
학습 내용
비트 연산자!(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
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
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 |