본문 바로가기

Algorithm245

[백준] 2812번 - 크게 만들기 (파이썬) # 크게 만들기 N, K = map(int, input().split()) arr = list(map(int, input().strip())) result = [] for x in arr: if not result: result.append(x) continue while result and result[-1] < x and K != 0: K -= 1 result.pop() result.append(x) while K != 0: K -= 1 result.pop() print(*result, sep='') 자료구조(스택), 그리디 1. result 리스트를 정의하고 입력받은 값들을 하나씩 순회 - result 리스트가 비어 있다면 append하고 continue - result[-1]보다 현재 값이 더 크.. 2022. 3. 9.
[프로그래머스] 고득점Kit (6) - 그리디(2) (파이썬) 1. 구명보트 (Lv. 2) # 구명보트 def solution(people, limit): people.sort(reverse=True) answer = 0 i = 0 j = len(people) - 1 while i 2022. 3. 9.
[백준] 17822번 - 원판 돌리기 (파이썬) # 원판 돌리기 from collections import deque import sys intput = sys.stdin.readline N, M, T = map(int, input().split()) dx = [0, 1, 0, -1] dy = [1, 0, -1, 0] arr = [] for _ in range(N): arr.append(deque(map(int, input().split()))) order = [] for _ in range(T): order.append(list(map(int, input().split()))) def rolling(n, dir): for x in range(n, N+1, n): if dir == 0: temp = arr[x-1].pop() arr[x-1].appen.. 2022. 3. 8.
[프로그래머스] 고득점Kit (6) - 그리디(1) (파이썬) 1. 체육복 (Lv. 1) # 체육복 def solution(n, lost, reserve): lost = set(lost) reserve = set(reserve) answer = 0 for x in (lost-reserve): if x-1 in (reserve-lost): reserve.remove(x-1) continue elif x+1 in (reserve-lost): reserve.remove(x+1) continue answer += 1 return n - answer 집합의 성질을 이용했다. (차집합 이용) 체육복을 잃어버린 인원 중, 여벌 체육복이 없는 인원들(lost - reserve)을 for문으로 돌면서 앞이나 뒤의 사람이 여벌 체육복을 가지고 왔으면서 체육복을 잃어버리지 않은 집합(.. 2022. 3. 5.
[백준] 2239번 - 스도쿠 (파이썬) # 스도쿠 import sys input = sys.stdin.readline N = 9 arr = [] empty = [] for i in range(N): arr.append(list(input().strip())) for j in range(N): if arr[i][j] == '0': empty.append((i, j)) def add_num(k): global isDone if k == len(empty): isDone = True return temp = check_available_num(empty[k][0], empty[k][1]) for x in temp: arr[empty[k][0]][empty[k][1]] = x add_num(k+1) if isDone: return arr[empty[.. 2022. 3. 5.
[프로그래머스] 고득점Kit (5) - 완전탐색 (파이썬) 1. 모의고사 (Lv. 1) # 모의고사 def solution(answers): answer = [] one = [1, 2, 3, 4, 5] two = [2, 1, 2, 3, 2, 4, 2, 5] thr = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] one = one*(len(answers)//len(one)) + one[:(len(answers) % len(one))] two = two*(len(answers)//len(two)) + two[:(len(answers) % len(two))] thr = thr*(len(answers)//len(thr)) + thr[:(len(answers) % len(thr))] result = [0, 0, 0] for i in range(len(answe.. 2022. 3. 4.
[프로그래머스] 고득점Kit (4) - 정렬 (파이썬) 1. K번째수 (Lv. 1) # K번째수 def solution(array, commands): answer = [] for start, end, k in commands: sliced = array[start-1:end] sliced.sort() answer.append(sliced[k-1]) return answer 문제 그대로 슬라이싱 하고 정렬을 해준 다음 k번째 수를 answer에 append 2. 가장 큰 수 (Lv. 2) # 가장 큰 수 def solution(numbers): numbers = list(map(str, numbers)) numbers.sort(key=lambda x: x*3) numbers.reverse() answer = int(''.join(numbers)) return.. 2022. 3. 4.