no image
[알고리즘 일기] 12. 합병 정렬(1)
합병 정렬 합병 정렬 알고리즘 중 사용되는 merge 함수를 작성하시오. 주의사항 * merge 함수는 정렬된 두 리스트 list1과 list2를 받아서, 하나의 정렬된 리스트를 리턴합니다. ❧ 테스트 셋 def merge(list1, list2): # Code # Test print(merge([1],[])) print(merge([],[1])) print(merge([2],[1])) print(merge([1, 2, 3, 4],[5, 6, 7, 8])) print(merge([5, 6, 7, 8],[1, 2, 3, 4])) print(merge([4, 7, 8, 9],[1, 3, 6, 10])) ❧ 출력 예시 [1] [1] [1, 2] [1, 2, 3, 4, 5, 6, 7, 8] [1, 2, 3, 4..
2021.05.12
no image
[Security] 스택 버퍼 오버플로우 원리 이해 및 취약점 분석을 통한 대응책 마련
Development Environment : Kali Linux (64-Bit), Vim text editor Development Language : C Development Tool : GDB(GNU debugger) 스택의 이해 Stack : 함수 Parameter Variable, 함수 내의 Local Valriable, 함수의 Return Address 등이 저장되는 영역으로 상위 메모리 주소에서 하위 메모리 주소로 데이터가 저장된다. 스택의 시스템 레지스터 EBP 스택 베이스 주소를 가리키는 레지스터 ESP 스택 탑 주소를 가리키는 레지스터 EIP 다음 실행할 명령어를 가리키는 레지스터 메인함수 내에서 함수 호출 시, EBP는 함수가 실행되는 동안만 함수가 호출된 위치로 옮겨진다. 이후 함수..
2021.05.12
no image
[알고리즘 일기] 11. 1부터 n까지의 합
1부터 n까지의 합 분할 정복 방식을 사용하여 1부터 n까지 더하는 함수를 작성하시오. 주의사항 * 함수는 두 개의 정수 인풋 start와 end를 받고, start부터 end까지의 합을 리턴합니다. end는 start보다 크다고 가정합니다. ❧ 테스트 셋 def consecutive_sum(start, end): #code #Test print(consecutive_sum(1, 10)) print(consecutive_sum(1, 100)) print(consecutive_sum(1, 253)) print(consecutive_sum(1, 388)) ❧ 출력 예시 55 5050 32131 75466 ❧ 정답 def consecutive_sum(start, end): if start == end: ret..
2021.05.11
no image
[알고리즘 일기] 10. 강남역 폭우
강남역 폭우 강남역에 엄청난 폭우가 쏟아진다고 가정합시다. 정말 재난 영화에서나 나올 법한 양의 비가 내려서, 고층 건물이 비에 잠길 정도입니다. 그렇게 되었을 때, 건물과 건물 사이에 얼마큼의 빗물이 담길 수 있는지 알고 싶은데요. 그것을 계산해 주는 함수 trapping_rain을 작성해 보려고 합니다. 함수 trapping_rain은 건물 높이 정보를 보관하는 리스트 buildings를 파라미터로 받고, 담기는 빗물의 총량을 리턴해 줍니다. trapping_rain([3, 0, 0, 2, 0, 4]) 리턴값 : 10 trapping_rain([0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]) 리턴값 : 6 ❧ 테스트 셋 def trapping_rain(buildings): #Code..
2021.05.10
no image
[알고리즘 일기] 9. 가까운 매장 찾기
가까운 매장 찾기 ★벅스는 줄어든 매출 때문에 지점 하나를 닫아야 하는 위기에 처해 있습니다. 어떤 지점을 닫는 게 회사에 타격이 적을지 고민이 되는데요. 서로 가까이 붙어 있는 매장이 있으면, 그 중 하나는 없어져도 괜찮지 않을까 싶습니다. 사장님은 비서에게, 직선 거리가 가장 가까운 두 매장을 찾아서 보고하라는 임무를 주셨습니다. 설명 튜플은 각 매장의 위치를 x, y 좌표로 나타낸 것입니다. 0번 매장은 (2, 3)에, 그리고 1번 매장은 (12, 30) 위치에 있는 거죠. 함수 closest_pair는 이 좌표 리스트를 파라미터로 받고, 리스트 안에서 가장 가까운 두 매장을 [(x1, y1), (x2, y2)] 형식으로 리턴합니다. 참고로 이미 두 좌표 사이의 거리를 계산해 주는 함수 distan..
2021.05.09
no image
[알고리즘 일기] 8. 카드 뭉치 최대 조합
​ 카드 뭉치 최대 조합 카드 두 뭉치가 있습니다. 왼쪽 뭉치에서 카드를 하나 뽑고 오른쪽 뭉치에서 카드를 하나 뽑아서, 나온 두 수의 곱 중 가장 큰 값을 구하시오. ​ ​ ​ ​ ❧ 테스트 셋 def max_product(left_cards, right_cards): # Code # Test print(max_product([1, 6, 5], [4, 2, 3])) print(max_product([1, -9, 3, 4], [2, 8, 3, 1])) print(max_product([-1, -7, 3], [-4, 3, 6])) ❧ 출력 예시 24 32 28 ❧ 정답 Try 1 def max_product(left_cards, right_cards): max_value = left_cards[0] * r..
2021.05.08
no image
[Java] 7. 상속
상속 (inheritance) : 부모 클래스에 만들어진 필드, 메소드를 자식 클래스가 물려받음 상속을 통해 간결한 자식 클래스 작성 └ 동일한 특성 재정의 필요 ❌ → 자식 클래스의 간결 상속의 장점 클래스의 간결화: 멤버의 중복 작성 불필요 클래스의 관리 용이: 클래스들의 계층적 분류 소프트웨어의 생산성 향상: 재사용과 확장 용이 상속의 특징 클래스의 다중 상속 지원 ❌ (클래스를 여러 개 상속 불가) 상속 횟수는 무제한이다. 상속의 최상위 조상 클래스는 java.lang.Object 클래스이다. └ 컴파일러에 의해 자동으로 상속이 이루어진다. 상속 선언 public class Person { ... } public class Student extends Person { // Person 을 상속받는..
2021.05.08
no image
[알고리즘 일기] 7. 이진 탐색 구현 알고리즘
​ 이진 탐색 구현 알고리즘 이진 탐색 알고리즘은 선형 탐색 알고리즘과 달리, 정렬된 리스트를 전제로 합니다. 정렬된 리스트가 아니면 이 알고리즘은 적용이 불가능합니다. ​ ​ 주의사항 * 1회 비교를 거칠 때마다 탐색 범위가 (대략) 절반으로 줄어듭니다. ​ ​ ❧ 테스트 셋 def binary_search(element, some_list): # Code print(binary_search(2, [2, 3, 5, 7, 11])) print(binary_search(0, [2, 3, 5, 7, 11])) print(binary_search(5, [2, 3, 5, 7, 11])) print(binary_search(3, [2, 3, 5, 7, 11])) print(binary_search(11, [2, ..
2021.05.07
no image
[알고리즘 일기] 6. 선형 탐색 구현 알고리즘
​ ​ 선형 탐색 구현 알고리즘 선형 탐색이란, 리스트의 처음부터 끝까지 순서대로 하나씩 탐색을 진행하는 알고리즘입니다. ​ ​ 주의사항 * element in some_list와 같이 in 키워드를 사용하는 건 안 됩니다. ​ ​ ❧ 테스트 셋 def linear_search(element, some_list): # Code #Test print(linear_search(2, [2, 3, 5, 7, 11])) print(linear_search(0, [2, 3, 5, 7, 11])) print(linear_search(5, [2, 3, 5, 7, 11])) print(linear_search(3, [2, 3, 5, 7, 11])) print(linear_search(11, [2, 3, 5, 7, 11]..
2021.05.06