목록분류 전체보기 (78)
개발일지

A. 문제설명https://school.programmers.co.kr/learn/courses/30/lessons/17677# 문자열 2개 사이에서 자카드 유사도를 구하라. 문자열을 2문자씩 나눠서 교집합과 합집합을 구하라.B. 답안from collections import Counterdef solution(str1, str2): answer = 0 str1_arr = [str1[i]+str1[i+1] for i in range(len(str1)-1)] str2_arr = [str2[i]+str2[i+1] for i in range(len(str2)-1)] arr1_eng = [] arr2_eng = [] for i, s in enumerate(str1..

알고리즘 문제를 java로 풀다가 오류가 났다.int[] arr = {1,2,3};Arrays.sort(arr, (a, b) -> b-a); 오류: no suitable method found for sort(int[],(a,b)->b - a) 지금까지 원시타입 배열로 Arrays의 sort()를 잘 사용했었는데, comparator를 사용하려하니 Arrays에 이런 메소드는 없다고 한다.Arrays클래스가 원래 참조타입 배열을 다루나? 뭐지? 하고 찾아봤다. A. 결론은? Arrays.sort()는 메소드 오버로딩으로 다 작동한다. Arrays.sort() 메소드를 보면, 원시타입(int[], long[] ...)별로 오버로딩이 되어있는 것을 확인할 수 있다.ex)- 원시타입 배열(int[])를 넣으면..

A. 문제설명https://school.programmers.co.kr/learn/courses/30/lessons/178870 리스트가 주어질 때, 조건을 만족하는 부분 리스트를 찾아라.B. 답안def solution(sequence, k): answer = [0, 2000000000] start, end = 0,0 q_sum = sequence[0] sequence.append(0) l = len(sequence)-1 while start end-start: answer[0], answer[1] = start, end end += 1 q_sum += sequence[end..

A. 문제설명https://school.programmers.co.kr/learn/courses/30/lessons/155651 호텔을 최소한의 객실만을 사용하여 예약 손님들을 받으려고 한다. 예약시간이 주어질 때, 최소 객실 수를 구하라.B. 답안def solution(book_time): booking = [] answer = 1 for start, end in book_time: start_as_minutes = int(start[:2])*60 + int(start[3:]) end_as_minutes = int(end[:2])*60 + int(end[3:]) + 10 booking.append([start_as_minutes..

A. 문제설명https://school.programmers.co.kr/learn/courses/30/lessons/181188 미사일들을 요격해야한다. 미사일들의 비행 위치가 주어지고, 최소 횟수로 요격할 수 있는 방법을 찾아야 한다.B. 답안def solution(targets): answer = 0 targets.sort(key = lambda x : (x[1], x[0])) end_point=0 for s,e in targets: if s >= end_point: answer+=1 end_point = e return answer C. 회고풀이에 실패했다. 답을 찾아보고 풀었다. 결론적으로 중요한 것은..
알고리즘 문제를 자바로 풀다가, ArrayList을 Deepcopy할 일이 생겼다.stream()을 사용해서 어떻게 해볼 수 있을까 찾아보는데, 방법이 1번 addAll()List copy = new ArrayList();copy.addAll(original); 2번 List copy = new ArrayList(original);가 나왔다. 그런데 2번은 분명 Shallow copy인 것 같은데, deepcopy라고? 생각이 들었다.ArrayList는 참조 타입이니, original의 값인 주소 값을 리턴하지 않을까 싶었다. 그래서 찾아보니, A. 결론은?Shallow Copy이다.사람들이 deep copy라고 오해하는 이유는, 2가지인데1) new ArrayList(original) 시 origina..

A. 문제설명https://school.programmers.co.kr/learn/courses/30/lessons/118667 두 큐가 주어지고, 각 큐의 원소의 합을 같게 만들기 위해 필요한 작업의 최소 횟수를 구한다.B. 답안from collections import dequedef solution(q1, q2): answer = 0 sum_q1, sum_q2 = sum(q1), sum(q2) num = (sum_q1 + sum_q2)/2 q1 = deque(q1) q2 = deque(q2) limit = len(q1)*2 while sum_q1 != num: if sum_q1 limit*2: return -1 ..

알고리즘 문제를 풀다가, 나는 answer = a / 2다른 사람의 풀이에서는answer = a >> 1인 것을 보았다. 위는 산술연산자( / , *, +, -) 아래는 비트연산자(shift, and, or, not)이다. 그중 >>는 shift 연산자이다. 비트연산자가 산술연산자보다 더 빠르다는 글들을 보았는데, 짐작해봐도 그럴 것 같다. 어짜피 우리가 작성한 코드는 기계어로 변환된다. 그리고 shift는 기계어가 한 번에(한 클럭에) 실행가능한 가장 단순한 명령어 중 하나이다. 그렇다면 결국 산술 연산인 // 은 컴파일러를 통해 결국 shift로 변환되거나, 또 다른 단순한 명령어들의 조합으로 계산 될 것이다. 그러니 비트연산자가 더 빠를 것 같았다. A. 결론은? 빠를 수도 있고, 빠르지 않을 수도..

A. 문제설명https://school.programmers.co.kr/learn/courses/30/lessons/42584 초 단위로 기록된 주식가격이 주어지고, 각 주식 가격이 떨어지지 않은 기간이 몇 초인지 구한다.B. 답안def solution(prices): answer = [0]*len(prices) # prices의 인덱스를 담는 스택 stack = [] for i, price in enumerate(prices): while stack and prices[stack[-1]] > price: index = stack.pop() answer[index] = i - index stack...

A. 문제설명https://school.programmers.co.kr/learn/courses/30/lessons/42885 무인도에서 2명씩 보트를 타고 나가야 한다. 사람들의 몸무게가 주어지고, 보트의 제한 무게가 주어진다.보트를 최소로 사용하는 횟수를 구한다.B. 답안from collections import dequedef solution(people, limit): answer = 0 people.sort() boat = deque(people) while boat: small = boat[0] big = boat[-1] boat.pop() answer +=1 if small..