🥕
TIL
  • [TIL] Studying tech / computer science knowledge
  • KeyMap
  • 알고리즘
    • 복잡도 계산 ( Computational Complexity )
    • DisjointSet-unionFind
    • Bellman-ford Algorithm
    • Dijkstra's Algorithm
    • DP ( Dynamic Programming , 동적 계획법 )
    • 플로이드-워셜 알고리즘 (Floyd-Warshall algorithm)
    • Kruskal's Algorithm
    • 최장 증가 수열 (Longes Increasing Subsequence)
    • Prim's Algorithm
    • 정렬
    • 시간복잡도 와 공간복잡도 ( Time Complexity & Space Complexity )
    • Topological Sort (위상 정렬)
  • 책 읽고난 후 요약
    • 프로그래밍 대회에서 배우는 알고리즘 문제해결 전략
    • cleancode
    • 도메인 주도 설계로 시작하는 마이크로서비스 개발
    • 오브젝트
  • CDC
    • debzium
    • kafka
  • 개발 상식
    • asciidoctor
    • 컴파일러
    • ELK 스택
    • 엔디안
    • git
    • Gitmoji
    • 테스트 종류
    • 라이브러리와 프레임워크
    • 정규 표현식
    • REST API
    • 동기와 비동기 / Blocking과 NonBlocking
    • Transaction Script와 Domain Model
    • 디자인 패턴
      • 행동 패턴
      • 객체 생성 패턴
        • 추상 팩토리 패턴
        • 빌더 패턴
        • 팩토리 메서드 패턴
        • [생성 패턴] 프로토 타입 (Prototype Parttern)
        • 싱글톤
      • 구조 패턴
        • 어댑터 패턴
        • 브릿지 패턴
        • 컴포짓(Composite) 패턴
        • 데코레이터
        • 프록시
    • refactoring
      • 중복 코드
      • 전역 데이터
      • 긴 함수
      • 긴 매개변수 목록
      • 가변 데이터
      • 이해하기 힘든 이름
  • 자료구조
    • AVL Tree
    • Splay Tree
    • aaTree
    • array-list
    • 자료구조 시간/공간 복잡도
    • 그래프
    • 힙
    • Red Black Tree
    • stack-queue
    • 트리 ( Tree )
  • DevOps
    • MSA
    • Kubernetes
      • AccessingAPI
      • controller
      • dashboard
      • kubernetes
      • object
      • pod
      • service
      • volume
  • Java
    • 어노테이션
    • 제어문
    • 데이터 타입
    • Enum
    • jvm
    • 연산자
    • thread
    • Java8
      • CompletableFuture
      • Date/Time
      • 어노테이션과 메타스페이스
      • 인터페이스
      • 람다식
      • Optional
      • 스트림
  • JavaScript
    • moduleProject
    • webpack-babel
    • 코어 자바스크립트
      • array
      • 함수 바인딩
      • 데코레이터와 포워딩
      • Class
      • 비교 연산자
      • Date 내장 객체
      • destructuring-assignment
      • function
      • 함수의 prototype 프로퍼티
      • 가비지 컬렉션 ( Garbage Collection )
      • JSON (JavaScript Object Notation)
      • map-set
      • 내장 프로토타입
      • new연산자와 생성자 함수
      • 객체
      • Object.keys, values, entries
      • 옵셔널 체이닝 '?.'
      • 프로퍼티 플래그
      • 프로퍼티 종류
      • 프로토 타입
      • 호출 스케줄링 ( scheduling a call )
      • scope
      • this
      • type-conversions
      • type
      • 함수의 자료형
      • var_let_const
  • Linux
    • 기본 명령어
    • 파일 종류
    • 리눅스
  • 네트워크
    • 응용 계층 ( Application Layer )
    • 오류 검출과 오류 정정
    • Http
    • Http Header
    • 컴퓨터 네트워크란
    • 네트워크 계층
    • 네트워크 제어 영역
    • 전송 계층 ( Transport Layer )
  • PHP
    • Facade
    • composer
    • scopeResolutionOperator
    • Laravel
      • SocialProvider
      • architecture
      • blade
      • controller
      • db
      • dbArchitecture
      • debug
      • eloquent
      • email
      • event
      • exceptionHandling
      • middleware
      • model
      • modelFactory
      • pagingLoading
      • queryBuilder
      • route
      • scout
      • seeding
      • tntsearch
      • validate
      • view
  • React
    • Next.js
    • React 란?
  • Spring
    • Controller
    • 요청이 들어왔을때 스프링이 처리하는 방법 ( 내부구조 )
    • ConfigurationProperties
    • Entity / DTO / VO
    • Maven
    • Repository와 DAO
    • 스프링 빈
    • Spring Framework
    • MVC 패턴
    • 도메인 입력값 검증
    • Spring Cloud
      • Spring Cloud
      • Eureka
    • Spring Data
      • JPA
      • JPA 어노테이션
      • 엔티티 비교
      • 복합 키와 식별 관계 매핑
      • JPA 예외처리
      • 객체지향 쿼리
      • EntityManagerFactory와 EntityManager
      • JPA 최적화
      • 프록시와 연관관계 맵핑
      • 연관관계
      • 상속관계 맵핑
      • 트랜잭션 범위와 영속성 컨텍스트
      • 데이터 타입
      • MySQL 연결
      • Pageable
    • Spring Project들과 library
      • Custom Serialize
      • Elasticsearch Index API
      • Spring HATEOAS
      • lombok (롬복)
      • Model Mapper
      • Object Mapper
      • Representation Model
      • Spring REST Docs
      • Spring Boot
    • Spring Security
      • Spring Security
      • Authentication
      • Authentication Filter
      • Authorization Filter
      • Filter Chain
      • SecurityContext
      • Spring OAuth2.0
    • Spring Test
      • AssertJ
      • Junit5
      • JunitParams
      • Mock Object
  • DataBase
    • ALIAS
    • CONCAT
    • CTE
    • Group By
    • HAVING
    • IFNULL
    • 인덱스
    • JOIN
    • ORDER BY
    • ROLLUP
    • SELECT
    • SELECT DISTINCT
    • SQL
    • WHERE
  • Web 상식
    • OAuth
    • WAS
    • HTTP통신 기반 인증
    • 브라우저
    • CSR 과 SSR
    • HTTPS
    • Web
Powered by GitBook
On this page
  • 문제 해결전략
  • 코딩에 관하여
  • 재귀 호출과 부분 문제
  • 최적화 문제
  • 동적 계획법 (DP)
  1. 책 읽고난 후 요약

프로그래밍 대회에서 배우는 알고리즘 문제해결 전략

코딩 테스트를 보거나 연습을 위해 문제를 풀게 되면 문제이해를 한 후 바로 코딩에 들어갔었는데, 코딩에 들어가기전 생각을 정리하거나 어떤 알고리즘/자료구조를 사용하여 문제를 해결할지 필기를 하거나 머리속으로 한번 정리를 한 후에 문제 해결에 임하는 것이 더 도움이 된 다는 것을 언급 하고 있다. 또한, 문제를 풀고 난 후에는 회고가 중요하고 풀지 못하는 문제 같은 경우에 답안을 봐도 복기가 정말 중요하다고 강조하고 있다.

문제를 시작하기전 입력예제를 보고 알고리즘을 선택하고 경우의 수를 계산해보며 해당 알고리즘으로 사용해도 되겠는가 한번 생각해보고 문제풀이 시작하기!!

문제 해결전략

  1. 비슷한 문제에 대해 앞전에 풀어본 문제 해결전략을 이용해본다.

  2. 문제의 경우의 수를 순차적으로 줄여나가 단순화 시켜본다.

  3. 문제 풀이 과정을 수식화 해본다.

  4. 그림으로 그려본다.

  5. 문제의 내제된 순서를 바꾸어 뒤에서부터 풀어본다.

  6. 순서가 없는 문제에 순서를 부여하여 강제해 풀어본다.

코딩에 관하여

테스트만을 통과하기 위한 코드(스파게티 코드)가 아닌 읽기 좋고 재사용이 가능한 그런 코드를 작성하자.

이 책에서도 클린 코드의 몇 장들은 코딩하는데 알아두면 도움이 되는 책이라고 소개를 하고 있다.

재귀 호출과 부분 문제

재귀호출을 통해 문제의 조건이 적합하는 지 판단후 경우의 수를 한개씩 줄여가는 문제는 DFS나 BFS를 통해 완전탐색으로 해결할 수 있으며, 순서를 강제하여 중복을 제거하는 방식으로 풀이

최적화 문제

문제의 답이 여러개이고 그 중 가장 좋은답을 찾아내는 문제들을 최적화 문제라고 하고 이도 완전 탐색이 가장 직관적인 방법이다. (입력에 따른 경우의 수를 생각해보고 시간을 계산해 적절하다면 가장 쉽게 풀이할 수 있다는 뜻) 문제의 답이 여러개이고 그 중 가장 좋은답을 찾아내는 문제들을 최적화 문제라고 하고 이도 완전 탐색이 가장 직관적인 방법이다. (입력에 따른 경우의 수를 생각해보고 시간을 계산해 적절하다면 가장 쉽게 풀이할 수 있다는 뜻)

동적 계획법 (DP)

구현 방법

  1. 문제를 완전탐색을 이용해 해결

  2. 중복된 문제를 한번만 계산하도록 메모이제이션 적용

Previous책 읽고난 후 요약Nextcleancode

Last updated 3 years ago