플라즈밍
플라즈마 IT
플라즈밍
  • All (163)
    • MindSet (2)
    • Wisdom (8)
    • Book (18)
    • [Web] (6)
      • [Web]Guide (2)
      • [Web]HTML-CSS-JS (1)
      • [Web]ReactJS (0)
      • [Web]NextJS (1)
    • 퀀트주식투자 (4)
      • [리포트]포트폴리오 (4)
    • 자산배분전략 (2)
      • [리포트]자산배분전략 (1)
    • 포트폴리오 (0)
      • 발걸음 (0)
    • 개발 Note (3)
    • TipNote (5)
    • 알고리즘 (27)
      • 백준[BOJ] 오답노트 (27)
      • 백준[BOJ] 강의 정리 노트 (0)
    • etc-posts (18)
      • Unity :: C# 튜토리얼 (18)
    • Web&Know (23)
    • 끄적임 (4)
    • 세상이슈 (0)
    • Youtube 유튜브 (3)
      • Youtube 채널소개 (3)
    • 창업 Know&Idea (1)
    • Web&Dev (4)
    • 프로젝트 (6)
      • Unity5 Project (3)
      • UnrealEngine4 Project (2)
      • Web Page (1)
    • 주가차트-기술적분석 (2)
    • BlockChain (7)
    • SystemDesign (11)

인기 글

최근 글

hELLO · Designed By 정상우.
플라즈밍

플라즈마 IT

알고리즘은 너무 어렵다.
끄적임

알고리즘은 너무 어렵다.

2019. 3. 30. 20:47
반응형

알고리즘은 너무 어렵다.

 

 

알고리즘 공부하기 싫다.

 

 

 

  처음에 종만북( 알고리즘 문제해결 전략 1,2) 으로 공부를 시작했지만, 처음부터 나오는 재귀함수와 그리고 이해의 어려움때문에 책읽는 내내 진도가 나가질 않았다. 코드를 붙잡고 시간을 투자하면 이해는 되긴 하지만, 조금 더 설명을 해주면 코드 이해하기가 더 수월했을 부분도 적지 않다. 즉 내 수준보다 더 높은 이해력과 사고력을 요구 했다. 그때 좌절을 준 완전탐색 재귀함수는 인강의 도움을 받아도 이해하기 어려웠다. 지금은 잠시 보류해 두었지만 알고리즘 입문때 재귀함수를 이해하려고 노력했던 내 자신이 대견스럽다.

 

재귀함수 종류:

  1.  브루트 포스
  2.  DFS
  3. Dp

지금은 위와 같이 조금이라도 큰 그림을 그리며 재귀함수 구조라도 다른 특성을 가짐을 이해하며 보니 훨씬 코드가 수월하게 읽힌다.

 

아래 코드 둘다 재귀함수를 이용한다.

#include <iostream>
using namespace std;
bool c[10];
int a[10];
void go(int index, int n, int m) {
    if (index == m) {
        for (int i=0; i<m; i++) {
            cout << a[i];
            if (i != m-1) cout << ' ';
        }
        cout << '\n';
        return;
    }
    for (int i=1; i<=n; i++) {
        if (c[i]) continue;
        c[i] = true;
        a[index] = i;
        go(index+1, n, m);
        c[i] = false;
    }
}
int main() {
    int n, m;
    cin >> n >> m;
    go(0,n,m);
    return 0;
}


//15650

#include <iostream>
using namespace std;
bool c[10];
int a[10];
void go(int index, int start, int n, int m) {
    if (index == m) {
        for (int i=0; i<m; i++) {
            cout << a[i];
            if (i != m-1) cout << ' ';
        }
        cout << '\n';
        return;
    }
    for (int i=start; i<=n; i++) {
        if (c[i]) continue;
        c[i] = true;
        a[index] = i;
        go(index+1, i+1, n, m);
        c[i] = false;
    }
}
int main() {
    int n, m;
    cin >> n >> m;
    go(0,1,n,m);
    return 0;
}

 

#include <iostream>
#include <cstring>
using namespace std;
long long d[31][31];
long long calc(int f, int h) {
    if (d[f][h] != -1) return d[f][h];
    if (f == 0) return 1;
    if (h == 0) return d[f][h] = calc(f-1, h+1);
    return d[f][h] = calc(f-1,h+1) + calc(f,h-1);
}
int main() {
    memset(d,-1,sizeof(d));
    while (true) {
        int n;
        cin >> n;
        if (n == 0) break;
        cout << calc(n, 0) << '\n';
    }
    return 0;
}

 

 

나는 종만북을 미뤄두고 백준선생님의 코드플러스 인강을 듣기 시작했다. 진작에 들을껄..

 

 

2019 SW 역량 테스트 준비 - 문제 2

  • 44,000원
  • 최백준
 

code.plus

코드 플러스는 코딩강의를 합니다

code.plus

 

갑자기 진절머리가 나서 쓰는 글이다. 

%연산자를 &쓰고 15분동안 찾고 멘붕이 옴.

 

 

알고리즘은 끝없이 공부를 해야한다.

반응형
저작자표시 (새창열림)

'끄적임' 카테고리의 다른 글

태국 여행 전에 알아 두어야 할 62 가지 사항  (0) 2019.05.14
루시드 드림(자각몽)에 대한 신비로운 사실  (0) 2019.03.24
어도비 스파크 그래픽 에디팅  (0) 2019.02.09
    '끄적임' 카테고리의 다른 글
    • 태국 여행 전에 알아 두어야 할 62 가지 사항
    • 루시드 드림(자각몽)에 대한 신비로운 사실
    • 어도비 스파크 그래픽 에디팅
    플라즈밍
    플라즈밍
    퀀트 주식투자 자산배분 데이터분석 정보 공유 프로그래밍,투자 주제의 책 강의 리뷰 노하우 전수

    티스토리툴바