본문 바로가기

컴퓨터/코테

프로그래머스 호텔 방 배정 import sys sys.setrecursionlimit(10000) def find(room_number, assignment): if room_number not in assignment : assignment[room_number] = room_number + 1 return room_number empty_room = find(assignment[room_number], assignment) assignment[room_number] = empty_room + 1 return empty_room def solution(k, room_number): answer = [] assignment = {} for request_room_number in room_number: num = find(requ.. 더보기
프로그래머스 징검다리 건너기 def solution(stones, k): minimum = 0 maximum = 200000000 person = maximum // 2 while True: # 건널 수 있나? possible = True cnt = 0 for i in stones : if i < person : cnt += 1 else : cnt = 0 if cnt == k : possible = False break # 건널 수 있으면 if possible : minimum = person next = (person + maximum) // 2 if person == next : return person person = next # 건널 수 없으면 else : maximum = person next = (person + mini.. 더보기
프로그래머스 - 디스크 컨트롤러[heap] import heapq def solution(jobs): jobLen = len(jobs) jobs.sort() waitSum = 0 time = jobs[0][0] for comeIn, jobTime in jobs: if comeIn > time: time = comeIn + jobTime else: time += jobTime waitSum += time - comeIn answer1 = waitSum // jobLen waitSum = 0 time = jobs[0][0] heap = [] task = jobs.pop(0) heapq.heappush(heap, (task[1], task)) while jobs or heap: if heap: task = heapq.heappop(heap)[1] if.. 더보기
프로그래머스5 - 방의 개수 def solution(arrows): direction = [ [0,1], [1,1], [1,0], [1,-1], [0,-1], [-1,-1], [-1,0], [-1,1], ] answer = 0 dic = {} path = {} x, y = 0, 0 dic[str([x, y])] = True for item in arrows: for i in range(2) : nextx, nexty = x + direction[item][0], y + direction[item][1] pathKey = str([x, y, nextx, nexty]) pathKey2 = str([nextx, nexty, x, y]) dicKey = str([nextx, nexty]) if not dicKey in dic : path[.. 더보기
릿코드 3 - Longest Substring, 카카오 보석쇼핑 def solution(gems): mySet = set(gems) setLen = len(mySet) minCount = 100001 if setLen == 1: return [1, 1] dic = {} for i in mySet: dic[i] = 0 r, l = 0, 0 dic[gems[0]] += 1 while r ran : minCount = ran ans = [l+1, r+1] if ran == setLen-1 : return ans dic[gems[l]] -.. 더보기
릿코드 84 - Largest Rectangle in Histogram class Solution: def largestRectangleArea(self, heights: List[int]) -> int: tmp = [heights[0]] cnt = [1] for i in range(1, len(heights)) : if heights[i] == tmp[-1] : cnt[-1] += 1 else : tmp.append(heights[i]) cnt.append(1) heights = tmp max = 0 for idx, item in enumerate(heights) : tmp = cnt[idx] for i in range(idx + 1, len(heights)) : if heights[i] < item : break tmp += cnt[i] for i in range(idx.. 더보기
릿코드 338 - 2진법 변환 class Solution: def countBits(self, n: int) -> List[int]: ans = [] for i in range(n+1): cnt = 0 while i != 0 : if i % 2 : cnt += 1 i = i // 2 ans.append(cnt) return ans 너무 간단한 이진법 문제. 파이썬의 내장함수와 속도를 비교해봤다. class Solution: def countBits(self, n: int) -> List[int]: ans = [] for i in range(n+1): ans.append(bin(i).count(str(1))) return ans 훨씬 빠르다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 수가 작을때는 첫번째 코드가 더 빠르지만 수가 커지면 bin() 과 coun.. 더보기
릿코드 876 - Middle of the Linked List class Solution: def middleNode(self, head: Optional[ListNode]) -> Optional[ListNode]: ans = 0 cur = head while cur : ans += 1 cur = cur.next ans = math.ceil(ans/2) if ans % 2 else ans/2 + 1 cur = head for i in range(int(ans)-1) : cur = cur.next return cur 3n/2 번의 연산에 결과를 내는 코드. class Solution: def middleNode(self, head: Optional[ListNode]) -> Optional[ListNode]: ans = 0 node = [] cur = head whil.. 더보기
릿코드200 - 섬의 수 class Solution: def numIslands(self, grid: List[List[str]]) -> int: ans = 0 m = len(grid) n = len(grid[0]) for i in range(m) : for j in range(n) : if grid[i][j] == "1" : ans += 1 self.check(grid, i, j) return ans def check(self, grid, i, j) : dir = [ [1, 0], [0, 1], [-1, 0], [0, -1] ] stack = [[i,j]] while stack : i, j = stack.pop() grid[i][j] = 0 for direction in dir : X, Y = direction nextX, n.. 더보기
릿코드62 - Unique paths [dp] class Solution: def uniquePaths(self, m: int, n: int) -> int: arr = [[0 for _ in range(n)] for _ in range(m)] for i in range(n) : arr[0][i] = 1 for i in range(m): arr[i][0] = 1 for i in range(1, m) : for j in range(1, n) : arr[i][j] = arr[i-1][j] + arr[i][j-1] return arr[m-1][n-1] 릿코드..... 실행할 때마다 시간이 미묘하게 변하는거 같다.. 지금까지 시간 줄이려고 로직 수정하고 했던건 다 우연히 줄었었나보다.. ㅋㅋㅋㅋㅋㅋ 더보기