18. 입국심사 ★★
2024. 7. 19. 23:44
프로그래머스/Lv. 2
유형 : 이분 탐색풀이 시간 : 인터넷 검색 def solution(n, times): times.sort() answer = 0 #이분 탐색 start = 0 end = n * times[len(times)-1] #최댓값 = 가장 오래 걸릴 경우 while start = n: #탐색 가능한 경우 answer = mid #우선 답을 저장 end = mid - 1 #더 작은 값을 찾기 위해 앞부분 탐색 return answer 풀이법이 정말 기발한.. 문제였다.이게 왜 이분탐색이야!? 싶었던 문제... 0~최대 시간까지의 범위에서mid 시간을 지정, 그 시간 내에 검사할 수 있는 사람의 수를 구..
17. 조이스틱 ★★ - 보류
2024. 7. 19. 23:28
프로그래머스/Lv. 2
유형: 그리디? 완전탐색?풀이 시간: 인터넷 검색 1. 나의 풀이def solution(name): answer = 0 a = ord('A') z = ord('Z') olist = [] for i in name: n = min (abs(ord(i) - a), abs(z - ord(i) + 1)) olist.append(n) answer += n cnt1 = 0 for i in range(len(olist)-1): if olist[i+1:].count(0) == len(olist[i+1:]): break cnt1 += 1 cnt2 = 0 olist...
16. 게임 맵 최단거리 ★ (BFS, zip)
2024. 7. 19. 20:41
프로그래머스/Lv. 2
유형 : BFS풀이 시간 : 30분 *최단거리 == BFS를 이용해 풀이하자!!**visted queue를 잊지 말자!!*from collections import deque def solution(maps): answer = 0 msize = len(maps) nsize = len(maps[0]) queue = deque() visited = deque() #initialization queue.append([0, 0]) visited.append([0, 0]) #순회를 위한 dx, dy dx = [1, 0, 0, -1] dy = [0, 1, -1, 0] #bfs search while queue: [cur..
15. 타겟 넘버 ★(DFS)
2024. 7. 18. 23:12
프로그래머스/Lv. 2
유형 : DFS풀이 시간 : 인터넷 참고 from collections import dequedef solution(numbers, target): #dfs 구현 answer = 0 stack = deque() ln = len(numbers) #첫 번째 원소를 insert하고 시작 stack.append([numbers[0], 0]) stack.append([-numbers[0], 0]) while stack: [curracc, curridx] = stack.pop() if curridx == ln-1: if target == curracc: answer += 1 el..
14. 카펫 (완전 탐색)
2024. 7. 18. 22:32
프로그래머스/Lv. 2
유형 : 완전탐색 풀이 시간 : 7분 def solution(brown, yellow): answer = [] avail = [] for i in range(1, int(yellow ** 0.5) + 1): if yellow % i == 0: avail.append([i, yellow//i]) for av in avail: [wid, dep] = av if 2* wid + 2 * dep + 4 == brown: return [dep + 2, wid + 2] return answer yellow를 기준으로 가능한 모든 yellow의 가로, 세로 길이를 avail에 append한 뒤,예상 brown의 길이..
13. 소수 찾기 (완전 탐색)
2024. 7. 18. 22:26
프로그래머스/Lv. 2
유형 : 완전탐색풀이 시간 : 10분 from itertools import permutationsdef solution(numbers): answer = dict() numbers = list(numbers) for i in range(1, len(numbers)+1): for num in permutations(numbers, i): if check(int(''.join(num))): answer[int(''.join(num))] = 1 return len(answer)def check(num): if num == 0 or num == 1: return False for i in range(2, i..
12. H-index ★★ (정렬)
2024. 7. 18. 22:13
프로그래머스/Lv. 2
유형 : 정렬시간 : 10분, 인터넷 검색 *h회 이상 인용된 논문이 h개 이상* 있으면 모두 후보가 된다. def solution(citations): answer = 0 citations.sort(reverse = True) true = [] for i in range(len(citations)): if i + 1 따라서, i+1 (현재 그 논문보다 많이 또는 똑같이 인용된 논문의 개수) 가 현재 논문 인용 횟수보다 많으면 h-index의 후보가 될 수 있다. 예)[9, 9, 9, 9, 9] 인 경우h = 5가 되어야 한다. 0이 아니라!이런 경우를 모두 고려하기 위해서, 주어진 조건을 만족하는 경우 모두 true 배열에 append한 뒤 true 배열의 max 값..
11. 가장 큰 수 ★★ (정렬)
2024. 7. 18. 21:51
프로그래머스/Lv. 2
유형 : 정렬풀이 시간 : 인터넷 검색 1. 나의 풀이처음에는 permutation을 사용해서 풀이를 시도했다. from itertools import permutationsdef solution(numbers): answer = '' num = [str(x) for x in numbers] ans = [] for i in permutations(num): ans.append(''.join(list(i))) ans.sort(reverse = True) return ans[0] 그러나 정답은 int의 범위를 벗어날 수 있다고 되어 있었고, 이는 곧 정수 정렬을 사용할 수 없다는 의미이다.이 코드에서처럼 문자열 정렬을 하는 것은 큰 수를 찾는 데에 의미가 전혀 없..