- 
                        
                        """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/299308 """ # 풀이 과정 """ select QUARTER, count(QUARTER) "ECOLI_COUNT" # case # when month(DIFFERENTIATION_DATE) <=3 then "1Q" # when 3< month(DIFFERENTIATION_DATE)<=6 then "2Q" # when 6< month(DIFFERENTIATION_DATE)<=9 then "3Q" # else "Q4"s # end as QUARTER from (select case when month(DIFFERENTIATION_DATE) <=3 then "1Q" when month(DIFFERENTIATION_DATE) > 3 and month(DIFFERENTIATION_DATE) <= 6 then "2Q" when month(DIFFERENTIATION_DATE) > 6 and month(DIFFERENTIATION_DATE) <= 9 then "3Q" else "4Q" end as QUARTER from ECOLI_DATA) as A group by QUARTER order by QUARTER asc """
 - 
                        
                        """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/131130 """ # 풀이 과정 def solution(cards): result = [] for k in range(len(cards)): # k는 처음 박스 번호 box_1 = [] a = cards[k] while True: if not cards[a - 1] in box_1: box_1.append(cards[a - 1]) a = cards[a - 1] else: score_1 = len(box_1) break check_2 = set(cards) - set(box_1) if score_1 == len(cards): result.append(0) continue for t in check_2: box_2 = [] box_2.append(t) while True: if not cards[t - 1] in box_1 and not cards[t - 1] in box_2: box_2.append(cards[t - 1]) t = cards[t - 1] else: score_2 = len(box_2) break result.append(score_1 * score_2) return max(result)
                                
                             - 
                        
                        """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/299310 """ # 풀이 과정 """ -- 전체 생각: sql문 구성 시 불러오는 순서 생각 후 구성 -- 부모 개체가 전년도 개체일 것인거 생각 -- group by 사용시 select문에서 group by 관련되지 않은 컬럼은 포함 불가이다. select year(A.DIFFERENTIATION_DATE) "YEAR",(B.check- A.SIZE_OF_COLONY) as "YEAR_DEV",A.ID -- join 방식 및 구성 방식 고민 후 > 작성 -- 직전 부모 개체를 파악하는 테이블 합성 > 크로스 조인? -- 연도별 그룹 묶는거로 인해 크로스 조인 오류 가능성 발생 -- 조인 방법 생각해보기 from ECOLI_DATA A, (select max(SIZE_OF_COLONY) "check",year(DIFFERENTIATION_DATE) "y" from ECOLI_DATA group by year(DIFFERENTIATION_DATE) ) as B where year(A.DIFFERENTIATION_DATE)= B.y -- 연도별 최고 무게 대장균과 지금 현재 무게의 편차를 구하기 # where A.PARENT_ID=B.ID -- 연도별? > 연도를 묶는 Group by Having 절 생각 order by year(A.DIFFERENTIATION_DATE) asc,YEAR_DEV asc """
 - 
                        
                        """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/299310 """ # 풀이 과정 """ -- 전체 생각: sql문 구성 시 불러오는 순서 생각 후 구성 -- 부모 개체가 전년도 개체일 것인거 생각 -- group by 사용시 select문에서 group by 관련되지 않은 컬럼은 포함 불가이다. select year(A.DIFFERENTIATION_DATE) "YEAR",(B.check- A.SIZE_OF_COLONY) as "YEAR_DEV",A.ID -- join 방식 및 구성 방식 고민 후 > 작성 -- 직전 부모 개체를 파악하는 테이블 합성 > 크로스 조인? -- 연도별 그룹 묶는거로 인해 크로스 조인 오류 가능성 발생 -- 조인 방법 생각해보기 from ECOLI_DATA A, (select max(SIZE_OF_COLONY) "check",year(DIFFERENTIATION_DATE) "y" from ECOLI_DATA group by year(DIFFERENTIATION_DATE) ) as B where year(A.DIFFERENTIATION_DATE)= B.y -- 연도별 최고 무게 대장균과 지금 현재 무게의 편차를 구하기 # where A.PARENT_ID=B.ID -- 연도별? > 연도를 묶는 Group by Having 절 생각 order by year(A.DIFFERENTIATION_DATE) asc,YEAR_DEV asc """
 - 
                        
                        """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/301647 """ -- bin(): 이진법 변환 -- select A.ID,A.GENOTYPE,B.GENOTYPE "PARENT_GENOTYPE" -- cross join 형식 cross join은 생략 가능! -- from ECOLI_DATA A, ECOLI_DATA B where A.PARENT_ID = B.ID and A.GENOTYPE & B.GENOTYPE = B.GENOTYPE # and cast(bin(A.GENOTYPE) as char) like CONCAT('%', CAST(BIN(B.GENOTYPE) AS CHAR)) order by A.ID
 - 
                        
                        """ 출처:프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/72413 """ # 풀이 과정 """ 생각방향: 다익스트라 알고리즘 각각으로 구하는것과 개별로 구하는 것 중 최소값으로 구하기 두 명 요금의 합이 최소가 되는 조건 """ from collections import defaultdict from collections import deque import heapq # 요금 f = defaultdict(list) # 연결된 경로 d = defaultdict(list) def diikstra_road(start, n): # 최소 경로 갱신 v = [float("inf")] * (n + 1) # 경로를 저장 order = [[]] * (n + 1) # 처음 부분 0 v[start] = 0 q = [] heapq.heappush(q, [0, start, []]) while q: now_fare, now_dir, o = heapq.heappop(q) if v[now_dir] < now_fare: continue for end in d[now_dir]: if v[end] > now_fare + f[(now_dir, end)]: v[end] = now_fare + f[(now_dir, end)] new = o[:] new.append(end) order[end] = new heapq.heappush(q, [now_fare + f[(now_dir, end)], end, new]) return v, order def diikstra(start, n): # 최소 경로 갱신 v = [float("inf")] * (n + 1) # 처음 부분 0 v[start] = 0 q = [] heapq.heappush(q, [0, start]) while q: now_fare, now_dir = heapq.heappop(q) if v[now_dir] < now_fare: continue for end in d[now_dir]: if v[end] > now_fare + f[(now_dir, end)]: v[end] = now_fare + f[(now_dir, end)] heapq.heappush(q, [now_fare + f[(now_dir, end)], end]) return v def solution(n, s, a, b, fares): global f, d for i, j, k in fares: f[(i, j)] = k f[(j, i)] = k d[i].append(j) d[j].append(i) # s>a,s>b v, order = diikstra_road(s, n) v = diikstra(s, n) result = float("inf") # 어느 지점까지 동승 후 재 배열 for i in range(1, n + 1): count = 0 count += v[i] v_new = diikstra(i, n) # a 목적지 count += v_new[a] # b 목적지 count += v_new[b] result = min(count, result) return result
                                
                             - 
                        
                        """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/388352 """ # 풀이 과정 from itertools import combinations """ n: 가능한 자연수 개수 q: 시도한 자연수 배열 집합 ans: 맞춘 자연수 개수 집합 > 스무고개 아이디어 생각! """ def solution(n, q, ans): check = [k + 1 for k in range(n)] num_list = list(combinations(check, len(q[0]))) num_list = list(map(list, num_list)) result = 0 for n in num_list: for count, q_ in enumerate(q): if len(q[0]) * 2 - len(set(q_ + n)) == ans[count]: pass else: break else: result += 1 return result
                                
                             - 
                        
                        """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/59036 """ """ 풀이 과정 SELECT ANIMAL_ID,NAME from ANIMAL_INS where INTAKE_CONDITION="Sick" order by ANIMAL_ID """
 - 
                        
                        """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/59037 """ """ 풀이 과정 SELECT ANIMAL_ID,NAME from ANIMAL_INS where INTAKE_CONDITION !="Aged" order by ANIMAL_ID """
 - 
                        
                        """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/59403 """ """ SELECT ANIMAL_ID,NAME from ANIMAL_INS order by ANIMAL_ID asc """