본문 바로가기 메뉴 바로가기

나홀로 프로그래밍 공부하기

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

나홀로 프로그래밍 공부하기

검색하기 폼
  • 분류 전체보기 (37)
    • 프로그래밍 대회에서 배우는 알고리즘 문제해결 전략 (30)
      • 6장_무식하게 풀기 (5)
      • 7장_분할 정복 (5)
      • 8장_동적 계획법 (10)
      • 9장_동적 계획법 테크닉 (10)
      • 10장_탐욕법 (0)
    • 이것이 취업을 위한 코딩 테스트다 with 파이썬 (7)
      • 11장_그리디 알고리즘 (6)
      • 12장_구현 문제 (1)
    • JAVA_Spring (0)
  • 방명록

분류 전체보기 (37)
8.5 문제 : 합친 LIS(Python)

문제 출처 : algospot.com :: JLIS algospot.com :: JLIS 합친 LIS 문제 정보 문제 어떤 수열에서 0개 이상의 숫자를 지운 결과를 원 수열의 부분 수열이라고 부릅니다. 예를 들어 '4 7 6'은 '4 3 7 6 9'의 부분 수열입니다. 중복된 숫자가 없고 오름 차순으로 algospot.com 1. 문제를 해결하기 전 알아둬야 하는 이론 (1) 최적 부분 구조 최적 부분 구조(Optimal substructure) : 어떤 문제에 대해서 분할 방식에 성립하는 조건으로 각 부분 문제의 최척해를 통해 전체 문제의 최적해를 얻어낼 수 있는 경우 최적 부분 구조가 성립한다고 말한다. 즉, 각 부분 문제의 최적해가 전체의 최적해로 이어지는 경우를 말한다. 반대로 작은 부분 문제의 ..

프로그래밍 대회에서 배우는 알고리즘 문제해결 전략/8장_동적 계획법 2021. 3. 29. 14:55
8.2 문제 : 와일드카드(Python)

문제 출처 : algospot.com :: WILDCARD algospot.com :: WILDCARD Wildcard 문제 정보 문제 와일드카드는 다양한 운영체제에서 파일 이름의 일부만으로 파일 이름을 지정하는 방법이다. 와일드카드 문자열은 일반적인 파일명과 같지만, * 나 ? 와 같은 특수 문자를 algospot.com 참고 자료 : [알고리즘2] 08.02 와일드 카드 문제 (WILDCARD) in 알고리즘 문제해결전략 (종만북) - YouTube 1. 문제 분석 ? : 어떤 글자와도 대응 * : 어떤 문자열에도 대응 여기서 문제를 해결하는데 *를 어떻게 처리하는지에 대한 어려움이 발생한다. *가 m번 발생하면 문자열을 m+1개의 조각으로 분해할 수 있다! ex. t*l?*o*r?ng*s -> [t..

프로그래밍 대회에서 배우는 알고리즘 문제해결 전략/8장_동적 계획법 2021. 3. 25. 16:42
8.1 동적 계획법_도입

1. 동적 계획법 큰 의미에서 분할 정복과 같은 접근 방식을 의미한다. 주어진 문제를 더 작은 문제로 나눈 뒤 조각의 답을 계산하고, 이 답들로부터 원래 문제에 대한 답을 계산한다. 이 중 어떤 문제는 다른 두 개 이상의 부분 문제를 푸는데 사용될 수 있기 때문에 답을 여러번 계산하는 대신 한 번만 계산하고 그 결과를 재활용하여 속도를 향상시킬 수 있다. 캐시(Cache) : 이미 계산한 값을 저장해두는 메모리의 장소 중복되는 부분 문제(Overlapping Subproblems) : 두 번 이상 계산되는 부분 문제 2. 메모이제이션(Memoization) 동적 계획법에서 함수의 결과를 저장하는 장소(캐시, Cache)를 마련해 두고, 한 번 계산한 값을 저장해 뒀다 재활용하는 최적화 기법 주어진 입력에..

프로그래밍 대회에서 배우는 알고리즘 문제해결 전략/8장_동적 계획법 2021. 3. 25. 15:35
7.6 문제 : 팬미팅(Python)

문제 출처 : algospot.com :: FANMEETING algospot.com :: FANMEETING 팬미팅 문제 정보 문제 가장 멤버가 많은 아이돌 그룹으로 기네스 북에 올라 있는 혼성 팝 그룹 하이퍼시니어가 데뷔 10주년 기념 팬 미팅을 개최했습니다. 팬 미팅의 한 순서로, 멤버들과 참가 algospot.com 1. 문제 해결을 위한 사고 과정 (1) 무식하게 풀기 팬의 수 N, 멤버의 수 M이라할 때 팬미팅 과정을 하나하나 시뮬레이션하는 방법 대략 O(M(N-M)) = O(NM_M^2)의 시간을 필요로 함 그러나 N과 M이 최대 200,000인 경우를 생각하면 제한 시간 안에 해결하기 어려움 (2) 곱셈으로 변형하기 1) 대략적인 생각 팬과 멤버들을 길이가 N과 M인 정수 배열로 생각하면 ..

프로그래밍 대회에서 배우는 알고리즘 문제해결 전략/7장_분할 정복 2021. 3. 23. 16:36
7.4 문제 : 울타리 잘라내기(Python)

문제 출처 : algospot.com :: FENCE algospot.com :: FENCE 울타리 잘라내기 문제 정보 문제 너비가 같은 N개의 나무 판자를 붙여 세운 울타리가 있습니다. 시간이 지남에 따라 판자들이 부러지거나 망가져 높이가 다 달라진 관계로 울타리를 통째로 교체 algospot.com 1. 문제 해결을 위한 사고 과정 (1) 무식하게 풀기 각 판자 높이의 배열 h[]가 주어졌을 때 l번 판자부터 r번 판자까지 잘라내서 사각형을 만듦 가장 간단한 방법은 가능한 모든 l과 r로 만들 수 있는 사각형의 값을 계산한다. 2중 for문을 통해 계산할 수 있으므로 시간 복잡도는 O(n^2) 그러나 문제에서 제한된 입력의 최대 입력은 20,000으로 20,000^2은 1억을 넘어가므로 제한 시간(1..

프로그래밍 대회에서 배우는 알고리즘 문제해결 전략/7장_분할 정복 2021. 3. 19. 15:34
7.2 문제 : 쿼드 트리 뒤집기(Python)

문제 출처 : algospot.com :: QUADTREE algospot.com :: QUADTREE 쿼드 트리 뒤집기 문제 정보 문제 대량의 좌표 데이터를 메모리 안에 압축해 저장하기 위해 사용하는 여러 기법 중 쿼드 트리(quad tree)란 것이 있습니다. 주어진 공간을 항상 4개로 분할해 재귀적 algospot.com 참고 자료 : [알고리즘2] 07.02 쿼드 트리 뒤집기 (QUADTREE) in 알고리즘 문제해결전략 (종만북) - YouTube 1. 문제 해결을 위한 사고 과정 (1) 무식하게 풀기 주어진 쿼드 트리 압축을 풀어서 실제 이미지를 얻고 상하 반전한 뒤 다시 쿼드 트리를 압축 하지만, 문제에서 주어진 제한에 의해 곧이곧대로 구현할 수 없음 이런 경우 선택할 수 있는 접근 방법은 ..

프로그래밍 대회에서 배우는 알고리즘 문제해결 전략/7장_분할 정복 2021. 3. 19. 14:21
7.1 분할 정복_도입(2)_카라츠바의 빠른 곱셈 알고리즘(Python)

참고자료 : [알고리즘2] 07.01. 분할 정복과 카라츠바 알고리즘 in 알고리즘 문제해결전략 (종만북) - YouTube 1. 카라츠바의 빠른 곱셈 알고리즘 개요 구 소련의 아나톨리 알렉세예비치 카라츠바가 1960년대에 발견한 알고리즘 수백자리, 수만 자리가 되는 큰 정수를 곱할때 주로 사용하는 분할 정복의 한 예 큰 정수들을 배열을 이용해 저장하고 각 배열의 자리는 십진수의 자릿수를 의미한다. 두 큰 정수 A와 B가 있을 때, 배열을 이용하여 10^i번째 자리수를 각각 A[i], B[i]에 저장한다. A[i]와 B[j]의 곱셈 값을 C[i+j]에 저장하여 직관적인 코드를 작성할 수 있다. 2. 두 큰 수를 곱하는 O(n^2)시간 알고리즘 카라츠바의 빠른 곱셈 알고리즘을 구현하기 전에 먼저 마찬가지로..

프로그래밍 대회에서 배우는 알고리즘 문제해결 전략/7장_분할 정복 2021. 3. 16. 16:48
7.1 분할 정복_도입(1)

1. 분할 정복(Divide & Conquer)이란? 주어진 문제를 둘 이상의 부분 문제로 나눈 뒤 각 문제에 대한 답을 재귀 호출을 이용해 계산하고, 각 부분 문제의 답으로부터 전체 문제의 답을 계산하는 방법 일반적인 재귀 호출과 다른 점은 문제를 한 조각과 나머지 전체로 나누는 대신 거의 같은 크기의 부분 문제로 나누는 것이다. 2. 분할 정복을 사용하는 알고리즘의 3 가지 구성 요소 먼저, 분할 정복을 사용하기 위해서는 문제를 둘 이상의 부분 문제로 나누는 자연스러운 방법이 있어야 한다. 문제를 더 작은 문제로 분할하는 과정(Divide) 각 문제에 대해 구한 답을 원래 문제에 대한 답으로 병합하는 과정(Merge) 더이상 답을 분할하지 않고 곧장 풀 수 있는 매우 작은 문제(Base case, 기..

프로그래밍 대회에서 배우는 알고리즘 문제해결 전략/7장_분할 정복 2021. 3. 15. 15:03
이전 1 2 3 4 5 다음
이전 다음
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
  • 난이도:중
  • 그리디
  • 탐욕법
  • 프로그래밍 대회에서 배우는 알고리즘 문제해결전략
  • 구현
  • 난이도:상
  • 프로그래밍 대회에서 배우는 알고리즘 문제해결 전략
  • python
  • 마르코프 연쇄
  • 프로그래머스
  • 카카오
  • 파이썬
  • 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략
  • k번째 답 계산하기
  • 비트 마스크
  • 동적 계획법
  • 난이도:하
  • 종만북
more
«   2025/08   »
일 월 화 수 목 금 토
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함

Blog is powered by Tistory / Designed by Tistory

티스토리툴바