Simple_PS

  • Lv2 프로그래머스(Programmers)[Python][파이썬] 쿼드압축 후 개수 세기
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/68936 """ # 풀이 과정 def solution(arr): from collections import deque k = len(arr) result = [] q = deque([arr[0][0], arr[0][1]]) count_0 = 0 count_1 = 0 visit = [] flag = False while flag == False and k >= 2: new = [[0 for v in range(int(k / 2))] for w in range(int(k / 2))] count = 0 c = 0 d = 0 for a in range(0, k, 2): if a != 0: c += 1 d = 0 for b in range(0, k, 2): if arr[a][b] == arr[a + 1][b] == arr[a + 1][b + 1] == arr[a][b + 1] == 1: count += 1 new[c][d] = 1 elif arr[a][b] == arr[a + 1][b] == arr[a + 1][b + 1] == arr[a][b + 1] == 0: count += 1 new[c][d] = 0 else: new[c][d] = "x" check = 0 if arr[a][b] == 1: count_1 += 1 elif arr[a][b] == 0: count_0 += 1 if arr[a][b + 1] == 1: count_1 += 1 elif arr[a][b + 1] == 0: count_0 += 1 if arr[a + 1][b + 1] == 1: count_1 += 1 elif arr[a + 1][b + 1] == 0: count_0 += 1 if arr[a + 1][b] == 1: count_1 += 1 elif arr[a + 1][b] == 0: count_0 += 1 d += 1 # print(new,count_0,count_1) if count == 0: flag = True else: if k >= 2: k = int(k / 2) arr = new else: arr = new break # 마지막 배열 체크 for v in range(len(new)): for w in range(len(new)): if new[v][w] == 0: count_0 += 1 elif new[v][w] == 1: count_1 += 1 return [count_0, count_1]
  • Lv3 프로그래머스(Programmers)[Python][파이썬] 외벽 점검
    """ 출처:프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/60062 """ # 풀이 과정 """ 1시간 보내야 할 친구 수 n:외벽 길이 weak:취약 지점 dist:친구들이 이동 할 수 있는 길이 시간 초과 발생 > 중복을 제거할 알고리즘 및 아이디어 구현 생각해보기 """ from itertools import permutations def solution(n, weak, dist): # waek 개수 weak_point = len(weak) # 최대 사람 수 +1 > 최대 사람으로도 부족할 시 > -1 person = len(dist) + 1 # 원형을 펴서 직선으로 만들기 > 시계 방향, 반시계 방향으로 두 가지를 동시에 하기 위해서 line = weak for i in range(weak_point): line.append(weak[i] + n) # 사람 배치 순서 person_rotation = list(permutations(dist, len(dist))) for start in range(weak_point): for p in person_rotation: # 사람 수(취약점이 없을 수도 있다) cnt = 0 # 0명일때는 취약점 조사 불가 > -1로 표현함으로써 취약점 조사 불가 표현 location = -1 # weak 포인트 개수가 동일하게 하기 위해 start+weak_point for i in range(start, start + weak_point): if location < line[i]: cnt += 1 # 사람 수 len(dist) if cnt > len(dist): break # 거리 낭비를 최소화 > 취약점에서 시작 location = line[i] + p[cnt - 1] person = min(person, cnt) if person > len(dist): return -1 return person
  • Lv2 프로그래머스(Programmers)[Python][파이썬] 캐시
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/17680 """ # 풀이 과정 def solution(cacheSize, cities): from collections import deque result = 0 check = deque([]) # cache_list if cacheSize == 0: return len(cities) * 5 for a in cities: a = a.upper() if len(check) < cacheSize: if a in check: i = check.index(a) del check[i] check.append(a) result += 1 else: check.append(a) result += 5 else: if a in check: i = check.index(a) del check[i] check.append(a) result += 1 else: check.popleft() check.append(a) result += 5 return result
  • Lv3 프로그래머스(Programmers)[Python][파이썬] 연속 펄스 부분 수열의 합
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/161988 """ # 풀이 과정 # 이분탐색 접근 생각(오름차순이 아니라 활용x) # 두 개의 펄스를 만든 후 차례대로 각각 더해가다 만약 -를 간다면 0으로 초기화 후 매 순간 최댓값이 바뀌는지 체크하는 구조로 확인 def solution(sequence): t1 = [1, -1] # 1,-1,1... t2 = [-1, 1] # -1,1,-1... s = sequence i, j = divmod(len(s), 2) t1 += [1, -1] * (i - 1) t2 += [-1, 1] * (i - 1) t1 += [1] * j t2 += [-1] * j a = [] b = [] if len(s) == 1: t1 = [1] t2 = [-1] a_c = 0 b_c = 0 result = 0 for k in range(len(s)): a_c += t1[k] * s[k] b_c += t2[k] * s[k] if a_c < 0: a_c = 0 if b_c < 0: b_c = 0 if result < a_c: result = a_c elif result < b_c: result = b_c return result
  • Lv2 프로그래머스(Programmers)[Python][파이썬] 카펫
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/42842 """ # 풀이 과정 def solution(brown, yellow): result = [] b = brown y = yellow k = b + y t = k while t >= k ** 0.5: a = k / t if a == int(a) and a > 2: if k - (2 * t + (a - 2) * 2) == y: return [int(t), int(a)] else: t -= 1 else: t -= 1 return 0
  • Lv1 프로그래머스(Programmers)[Mysql] 흉부외과 또는 일반외과 의사 목록 출력하기
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/132203 """ """ SELECT DR_NAME,DR_ID,MCDP_CD,DATE_FORMAT(HIRE_YMD,"%Y-%m-%d") "HIRE_YMD" from DOCTOR where MCDP_CD in ("CS","GS") order by HIRE_YMD desc, DR_NAME asc """
  • Lv3 프로그래머스(Programmers)[Python][파이썬] 여행 경로
    """ 출처:프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/43164 """ # 풀이 과정 from collections import deque def solution(tickets): t = list(map(tuple, tickets)) trip = len(tickets) q = deque([]) for start, arrive in t: if start == "ICN": q.append([(start, arrive)]) result = [] while q: check = q.popleft() if len(check) == trip: result.append(check) continue for start, arrive in t: if check[-1][1] == start and check.count((start, arrive)) != t.count((start, arrive)): q.append(check + [(start, arrive)]) result = deque(result) answer = [] new = [] while result: r = result.popleft() new = [] for i in range(trip): new.append(r[i][0]) new.append(r[-1][1]) answer += [new] new = [] answer.sort() return answer[0]
  • Lv1 프로그래머스(Programmers)[Mysql] 인기 있는 아이스크림
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/133024 """ """ SELECT FLAVOR from FIRST_HALF order by TOTAL_ORDER desc,SHIPMENT_ID asc """
  • Lv2 프로그래머스(Programmers)[Python][파이썬] 최솟값 만들기
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/12941 """ # 풀이 과정 def solution(A, B): answer = 0 A.sort() B.sort(reverse=True) result = 0 print(A, B) for k in range(len(A)): result += A[k] * B[k] return result
  • Lv3 프로그래머스(Programmers)[Python][파이썬] 에어컨
    """ 출처:프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/214289 """ # 풀이 과정 def solution(temperature, t1, t2, a, b, onboard): t = temperature p = onboard max_t, min_t = t2, t1 dp = [[1e9] * 51 for _ in range(1001)] dp[0][t + 10] = 0 count = sum(p) for i in range(1, len(onboard)): # i 시간 if p[i] == 1: start = t1 end = t2 + 1 else: start = -10 end = 40 + 1 for j in range(start, end): if j == t: check = [dp[i - 1][j + 10]] if j + 10 != 0: check.append(dp[i - 1][j - 1 + 10]) if j + 10 != 50: check.append(dp[i - 1][j + 1 + 10]) dp[i][j + 10] = min(check) elif j > t: check = [dp[i - 1][j + 10] + b] if j + 10 != 0: check.append(dp[i - 1][j + 10 - 1] + a) if j + 10 != 50: check.append(dp[i - 1][j + 10 + 1]) dp[i][j + 10] = min(check) else: check = [dp[i - 1][j + 10] + b] if j + 10 != 0: check.append(dp[i - 1][j + 10 - 1]) if j + 10 != 50: check.append(dp[i - 1][j + 10 + 1] + a) dp[i][j + 10] = min(check) if p[i] == 1: count -= 1 if count == 0: last = i return min(dp[last]) # return min(dp[len(p)-1])
  • << 4 5 6 7 8 9 10 11 12 13 14 >>