백준 1920 | 이진탐색 | 수 찾기 [파이썬 python]
·
Algorithm/백준
1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 코드 # 이진 탐색 함수(재귀적 구현) def binary_search(array, target, start, end): if start > end: return None mid = (start + end) // 2 # 중간점 if array[mid] == target: # target을 찾았으면 리턴 return mid elif array[mid] > target: # target이 중간점보다 작으면 왼쪽부분 탐..
python | 파이썬 이진 탐색 라이브러리 bisect 사용하기
·
TIL/python
bisect은 정렬된 리스트에서 특정 원소를 찾을 때 효과적으로 사용할 수 있는 라이브러리이다. 많은 메소드들 중 bisect_left, bisect_right를 사용하면 많은 문제들을 해결할 수 있다. bisect_left(a, x): 배열 a의 정렬된 상태를 유지하면서 원소 x를 삽입할 수 있는 가장 왼쪽 인덱스를 리턴 bisect_right(a, x): 배열 a의 정렬된 상태를 유지하면서 원소 x를 삽입할 수 있는 가장 오른쪽 인덱스를 리턴 from bisect import bisect_left, bisect_right 정렬된 배열 array=[1, 2, 3, 4, 4, 6, 8, 9]가 있을 때, 4를 삽입할 수 있는 가장 왼쪽 인덱스와 가장 오른쪽 인덱스를 찾기 위해서는 다음과 같이 코드를 작성..
프로그래머스 | 완주하지 못한 선수 [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음 시도한 코드 def solution(participant, completion): for i in completion: if i in participant: participant.remove(i) return ''.join(participant) 어렵지 않은 문제이기 때문에 쉽게 코드를 작성할 수 있었다. 하지만 정확성 테스트는 모두 통과하지만 효율성 테스트는 시간 초과로 실패하였다. 내가 작성한 코드에서 시간을 많이 소요되는 부분을 생각해 보니 for문과 remove임을 알 수 있었다. completi..
python | collections.Counter 사용하기
·
TIL/python
파이썬에서 리스트나 문자열에 있는 요소의 개수를 셀 때 유용하게 사용할 수 있는 것이 Counter이다. Counter를 사용하기 위해 collections 패키지에서 Counter를 import 한다. from collections import Counter 'Hello hello'에서 각 알파벳이 몇 번씩 나타났는지 Counter를 이용해 세보자. Counter의 결과는 딕셔너리 형태로 나타나는 것을 볼 수 있다. 따라서, 딕셔너리와 똑같이 key값을 이용하여 value를 찾을 수 있다. 가장 많이 등장한 요소를 찾기 위해서는 most_common 메소드를 사용할 수 있다. 매개변수로 정수값을 넘겨주면 가장 많이 등장한 순서대로 원하는 개수를 출력해 준다. e와 o는 똑같이 2번 등장했지만 가장 많이..
프로그래머스 | 숫자 짝꿍 [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 from collections import Counter def solution(X, Y): x = Counter(X) y = Counter(Y) answer = '' for i in range(10): answer += str(i) * (min(x[str(i)], y[str(i)])) if answer == '': return '-1' answer = ''.join(sorted(answer, reverse=True)) if answer[0] == '0': return '0' else: return an..
프로그래머스 | 기사단원의 무기 [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음 시도한 코드 def isPrime(x): count = [0] * (x+1) for i in range(1, x+1): for j in range(1, i+1): if i % j == 0: count[i] += 1 return count def solution(number, limit, power): return sum([power if i > limit else i for i in isPrime(number)]) 1부터 number까지의 수가 가지는 약수의 개수를 구하기 위해 isPrime(x) 함수를..