Simple_PS

  • Lv1 프로그래머스(Programmers)[Mysql] 나이 정보가 없는 회원 수 구하기
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/131528 """ """ SELECT count(USER_ID) "USERS" from USER_INFO # wher AGE = NULL or AGE ="NULL"로 출력 안나오는 이유 확인해보기 where AGE is NULL """
  • Lv3 프로그래머스(Programmers)[Python][파이썬] 자물쇠와 열쇠
    """ 출처:프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/60059 """ # 포인트 사고: 자물쇠의 위치를 바꿈과 동시에 열쇠를 이동시키는 아이디어! # 풀이 과정 board = [] import copy def open_(key, distance, lock): check = [[0] * distance for _ in range(distance)] for x in range(1, distance - len(key)): for y in range(1, distance - len(key)): for i in range(len(key)): for j in range(len(key)): check[i + x][j + y] = key[i][j] for i in range(len(key), len(key) + len(lock)): for j in range(len(key), len(key) + len(lock)): if check[i][j] + board[i][j] != 1: break else: continue break else: return True check = [[0] * distance for _ in range(distance)] return False def rotation(key, r): count = 0 change = [[0] * len(key) for _ in range(len(key))] for i in range(len(key)): for j in range(len(key)): change[j][len(key) - i - 1] = key[i][j] return change def solution(key, lock): global board distance = len(key) * 2 + len(lock) board = [[0] * (len(key) * 2 + len(lock)) for _ in range(len(key) * 2 + len(lock))] lock_count = 0 for i in range(len(lock)): for j in range(len(lock)): board[len(key) + i][len(key) + j] = lock[i][j] if lock[i][j] == 0: lock_count += 1 key_count = 0 for i in range(len(key)): for j in range(len(key)): if key[i][j] == 1: key_count += 1 # for i in range(4): # key = rotation(key, i + 1) # print(key) if lock_count > key_count: return False open_door = open_(key, distance, lock) if open_door == True: return True # 90,180,270 for i in range(4): key = rotation(key, i + 1) open_door = open_(key, distance, lock) if open_door == True: return True return False
  • Lv2 프로그래머스(Programmers)[Python][파이썬] 택배 배달과 수거하기
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/150369 """ # 풀이 과정 def solution(cap, n, deliveries, pickups): # 택배 배달 후 빈 택배 상자 수거 # cap:담을 수 있는 최대 상자 개수 # 목표:배달+수거 최소 거리 구하기 dis = 0 # 이동거리 """ 아이디어 변화 과정 #최대 개수를 가져가야한다 #최대 개수를 가져가고 최대 개수를 가져오고(갈 떄 다 비워야 많은 걸 수거 가능) # 멀리있는걸 먼저 최대한 없애야한다 그래야 더 멀리 갈 필요가 없다 # 수거와 배달을 같이 생각! 돌아가면서 가져가니까 따로 생각? #배달만 수거만 생각 후 모두 최대로 생각 """ check_1 = [] check_2 = [] k = cap while deliveries: print(deliveries, "del") if deliveries and deliveries[-1] == 0: deliveries.pop() continue if deliveries[-1] <= cap: dis = len(deliveries) check_1.append(dis) a = deliveries.pop() k = k - a while deliveries: if deliveries[-1] >= k: deliveries[-1] = deliveries[-1] - k break else: b = deliveries.pop() k = k - b else: deliveries[-1] = deliveries[-1] - k dis += len(deliveries) check_1.append(dis) if sum(deliveries) == 0 or len(deliveries) == 0: break k = cap dis = 0 while pickups: print(pickups, "pick") if pickups and pickups[-1] == 0: pickups.pop() continue if pickups[-1] <= cap: dis = len(pickups) check_2.append(dis) a = pickups.pop() k = k - a while pickups: if pickups[-1] >= k and k != 0: pickups[-1] = pickups[-1] - k break elif pickups[-1] < k and k != 0: b = pickups.pop() k = k - b else: pickups[-1] = pickups[-1] - k dis = len(pickups) check_2.append(dis) if sum(pickups) == 0 or len(pickups) == 0: break k = cap print(check_1) print(check_2) return 0
  • Lv1 프로그래머스(Programmers)[Mysql] 조건에 맞는 회원 수 구하기
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/131535 """ """ SELECT Count(USER_ID) "USERS" from USER_INFO where AGE>=20 and AGE<=29 and JOINED like "2021%" """
  • Lv1 프로그래머스(Programmers)[Mysql] 가장 비싼 상품 구하기
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/131697 """ """ 풀이 과정 SELECT max(PRICE) "MAX_PRICE" from PRODUCT """
  • Lv3 프로그래머스(Programmers)[Python][파이썬] 입국 심사
    """ 출처:프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/43238 """ # 풀이 과정 def solution(n, times): times.sort() left = 0 right = n * max(times) result = [] while left <= right: count = 0 mid = (left + right) // 2 for t in times: count += (mid // t) if count > n: break if count >= n: right = mid - 1 result.append(mid) else: left = mid + 1 return min(result)
  • Lv2 프로그래머스(Programmers)[Python][파이썬] 타겟 넘버
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/43165 """ # 풀이 과정 def cal(check, a): new = [] if len(check) == 0: new.append(a) new.append(-a) else: for k in check: t_1 = k + a t_2 = k - a new.append(t_1) new.append(t_2) return new def solution(numbers, target): answer = 0 check = [] for a in numbers: check = cal(check, a) for b in check: if b == target: answer += 1 return answer
  • Lv3 프로그래머스(Programmers)[Python][파이썬] 인사고과
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/152995 """ # 풀이 과정 def solution(scores): n = scores[0] num = n[0] + n[1] s = sorted(scores, key=lambda x: (-x[0], x[1])) check = [] for i in range(len(s)): if s[i][0] + s[i][1] > num: if s[i][0] > n[0] and s[i][1] > n[1]: return -1 elif len(check) == 0: # 첫번째의 경우 인센티브 못받을 경우x check.append([s[i][0], s[i][1]]) v = s[i][1] w = s[i][0] else: if s[i][0] != w: # 더 작아지는 순간 if v > s[i][1]: # 이전 첫번째 성과가 무조건 높기에 두번째는 그 이전보다 높아야 인센티브 가능! continue else: check.append([s[i][0], s[i][1]]) v = s[i][1] w = s[i][0] else: check.append([s[i][0], s[i][1]]) v = s[i][1] # 첫번쨰가 같다면 두번쩨는 뒤로 갈수록 점수가 최소 높거나 같기때문에 갱신 return len(check) + 1
  • Lv2 프로그래머스(Programmers)[Python][파이썬] 큰 수 만들기
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/42883 """ # 풀이 과정 def solution(number, k): # 앞에서부터 제일 작은 수 k개 from collections import deque t = deque(list(number)) result = [] while k: n = t.popleft() if len(result) == 0: result.append(n) elif len(t) == 0: if int(result[-1]) < int(n): while True: result.pop() k -= 1 if len(result) == 0 or k == 0: result.append(n) break elif int(result[-1]) >= int(n): result.append(n) break else: if int(result[-1]) >= int(n): result.append(n) if k > 0: return "".join(result[:len(result) - k]) else: if int(result[-1]) < int(n): while True: result.pop() k -= 1 if len(result) == 0 or k == 0: result.append(n) break elif int(result[-1]) >= int(n): result.append(n) break else: if int(result[-1]) >= int(n): result.append(n) final = "".join(list(result) + list(t)) return final
  • Lv1 프로그래머스(Programmers)[Mysql] 12세 이하인 여자 환자 목록 출력하기
    """ 출처:프로그래머스. https://school.programmers.co.kr/learn/courses/30/lessons/132201 """ """ SELECT PT_NAME,PT_NO,GEND_CD,AGE, CASE when TLNO is not null then TLNO else "NONE" END "TLNO" from PATIENT where GEND_CD="W" and AGE <=12 order by AGE desc, PT_NAME asc """
  • << 2 3 4 5 6 7 8 9 10 11 12 >>