baekjoon   8년 전

사실 제가 지난 2월부터 책을 쓰고 있는데... 여러분 의견이 궁금해서 글을 남겨봅니다.

책은 이번달 말까지 다 쓰고 올해 안에 출간하는게 목표입니다!

대상 독자는 이런 문제를 거의 안 풀어본 사람들 또는 A+B정도만 풀 수 있는 사람들이 대상입니다. 이 게시판을 보는 대부분 유저들은 대상이 아닐 수도요 ㅋㅋㅋㅋㅋㅋ

책 컨셉을 잡는게 가장 처음에 힘들었었는데요, JM북이 워낙 뛰어난 책이라, 알고리즘/자료구조에 관한 설명은 쓸게 하나도 없더라고요.

그래서 잡은 컨셉이 따라해보기? 같은 컨셉인데 ㅋㅋㅋㅋ 이걸 어떻게 생각하는지 궁금해서 글을 남겨봅니다.

댓글에 더 좋은 컨셉이 달리거나, 이걸 대체 왜 책으로 쓰냐... 싶거나 뭐 아무튼 더 좋은 생각이 나거나, 의견을 제시해주시면 그걸 반영해서 수정해보려고 합니다. 책 내용을 뒤집어 엎어도 이번달 내에는 다 써야하긴 하는데, 뒤집어 엎어도 그때까지 다 쓸 수는 있을 것 같습니다.

책은 프로그래밍 소개라던가 이런 부분을 빼면 프로그래밍 언어(C/C++/Java), STL, 자료구조, 알고리즘 등 총 7개 챕터로 구성되어져 있는데

ㅇㅖ를 들어 STL Stack을 설명한다하면

  1. 만드는 법
  2. top, empty, push 등등 사용하는 방법
  3. 문제 풀어보기 (Stack은 뭔가 위에껄 써서 풀 수 있는 문제가 아직 OJ에 없네요)

같은 형식이 될 것 같고

string을 설명한다고 하면

  1. 만드는법, 입력받는 법
  2. 1을이용해서 문제 풀어보기 (https://www.acmicpc.net/problem/1152)
  3. size, empty 사용법
  4. 3을 이용해서 문제 풀어보기 (https://www.acmicpc.net/problem/2743)
  5. + ,+=, substr, clear등등 사용법
  6. 5를 이용해서 문제 풀어보기

뭐 이런 식이 될거 같네요 ㅋㅋㅋㅋ

이런 컨셉?이나 이런 책에 대해서 어떻게 생각하나요?

게시판에 남기기 부끄럽거나 저한테 따로 연락주고 싶으면 admin@acmicpc.net 으로 메일 보내 주세요

79brue   8년 전

그 책 기대되네요 ㅋㅋㅋ

jays   8년 전

"대상 독자는 이런 문제를 거의 안 풀어본 사람들 또는 A+B정도만 풀 수 있는 사람들" 이라는 전제에는 맞지 않지만

개인적인 경험을 바탕으로 부끄럽지만 몇 자 적어봅니다...

저 같은 경우에는 JM Book 에서 다루지 않은 내용들을 설명하는 책이 있었으면 좋겠다는 생각을 합니다.

예들 들면, 다음과 같은 주제들입니다.

- Heavy-Light Decomposition

- Convex Hull Trick

- MCMF

이 외에도 PS 를 잘하기 위해서는 알아야 할 JM Book 에서 다루지 않은 많은 주제들이 있을텐데,

(실력이 좋지 않다보니 무얼 어디까지 알아야되는지 정의조차 잘 안되는..)

저 같은 경우에는 연습을 하면서 그 때 그 때 채워나가려고 노력중입니다만 시간도 많이 걸리고 쉽게 잘 되지 않습니다.

쓰시려고하는 책의 방향과는 정반대의 방향의 의견을 남긴 것 같지만 혹시나 하는 마음으로 도움이 될까 해서 남겨봅니다.

baekjoon   8년 전

안녕하세요. 좋은 의견입니다!

저런 주제는 저보다 더 적당한 분이 계실 것 같습니다 ㅠㅠ

yukariko   8년 전

저는 재귀에 대한 내용을 튜토리얼부터 차근차근 자세하게 다뤘으면 좋겠습니다.

여러 알고리즘 책을 봤지만 JMBOOK을 포함한 대부분의 알고리즘 서적이 재귀를 적당히 다룰 줄 안다고 가정하고 시작하더라구요..

제가 문제를 풀어본 바로는 재귀 문제가 상당히 많은데

신입생들은 재귀에 많은 어려움을 가지는것 같습니다..

피보나치 재귀는 할줄 아는데

1,2,3 더하기 문제는 풀 줄 모르는.. (https://www.acmicpc.net/problem/9095)

재귀 함수를 구현하는 요령이나 몇가지 패턴에 대한 내용을 다뤘으면 합니다.

uintu   8년 전

저도 윗분과 마찬가지로.. 재귀에 대한 내용들을 많이 포함했으면 하는 바램입니다...!!

Hibbah   8년 전

저도 같은 의견입니다만..

JMBOOK 전반적으로 재귀적 구조를 이해하지 못하면 읽기가 어렵다고 생각하는데,

JMBOOK을 순서대로 본다면(사실 아니지만), 사실상 첫 관문이라고 볼 수 있는 6단원 재귀 영역이 처음 접근하는 사람 입장에서는 상당히 난이도가 높은 것 같아요

yukariko님 말씀대로 JMBOOK보다 조금 낮은 수준으로 재귀를 접근할만한 내용이 있으면 좋을 것 같아요



책 꼭 구입하겠습니다. (혹시 사인도 해주시나요 ?)

- 백준광팬

Hibbah   8년 전

덧붙여서..

JMBOOK을 보다보면 STL 컨테이너나 함수를 사용한 코드를 종종 볼 수 있는데,

평소에 단순히 배열이나 간단한 구조체 정도만 사용하시던 분들에게는 좀 거북스러운(?) 코드로 보일 수도 있을 것 같아요

자료구조나 알고리즘, STL도 쓰신다고 하니 아마 이미 생각하고 계신 것 같은데,

정말 자주 사용하는 STL컨테이너, STL함수(vector, sort, ...)에 대한 내용도 책 초반부에서 접할 수 있다면 시작하시는 분들 입장에서는 큰 도움이 될 것 같네요

실제로, 저도 처음 시작하는 주변 친구들이나 후배들이 어떤 문제를 읽고 머리속으로는 '정렬해야겠다..'라는 논리를 떠올리면서도

정렬하는 코드를 어떻게 구현해야될지 몰라서 한참 검색하던중에 STL sort를 알려주면 대부분 정말 신기해하는 반응을 보였던 것 같네요

h0ngjun7   8년 전

@jays
1. 컨벡스헐 트릭 : http://dyngina.tistory.com/28 (apio commando 문제 해법 설명인데 쉽게 잘 설명해놓았네요)

뿐만 아니라 동적계획법에서 특수한 경우에 적용되는 다양한 최적화에 대해서는 http://codeforces.com/blog/entry/8219 에 설명이 잘 되어있습니다.

2. HLD : http://theyearlyprophet.com/heavy-light-decomposit... (구종만님의 친절한 설명ㅎㅎ)

3. MCMF : 이건 음.. 쉽게 생각하면 유량이 최대화될 때, 가중치의 합이 최소 또는 최대(가중치에 다 -를 붙이고 결과에 - 한번 더)가 되게 하는 것인데... 저 같은 경우에는 문제로 직접 풀어보면서 익혔던 것 같습니다. 연습 문제는 아래와 같습니다.

1) https://algospot.com/judge/problem/read/CLEANING

2) 백준저지 1633번에 대한 제 풀이(아래 댓글을 보다보면 제가 그린 그래프 모델링이..) : https://www.acmicpc.net/board/view/1291 사실 dp로 쉽게 풀린다능...

3) https://www.acmicpc.net/problem/1657 그리드를 체스판으로 생각해서 정점을 이분그래프로 바꾸고 mcmf로 풀 수 있음. 그런데 원래 정해는 O(n^2 * 2^n) dp...

4) 2013 한국 icpc 인터넷 예선 I번 https://www.acmicpc.net/problem/8992 : 문제가 묻습니다. 너 mcmf 정의를 알고, 짤 줄 아니?

5) 이번 월파 C번.. 아이디어가 좀 필요해서 난이도가 있는 듯. https://www.acmicpc.net/problem/10786

다른 것들도 몇 개 더 있었는데 잘 떠오르지가 않네요! 하하....

h0ngjun7   8년 전

사실 저도 어느 순간부터는 책을 읽어서 지식을 쌓아도 실력이 느는 게 느껴지지 않고, 연습을 해도 제자리인 것 같아서 고민이지만... 요즘은 워낙 블로그나 codeforces, topcoder에 좋은 글들이 많다보니, 처음 입문하시는 분들에 비하면 아무것도 아닌 것 같네요.

아무래도 제가 처음 입문할 때에는 동적계획법 점화식을 어떻게 하면 저렇게 딱딱 떠올리는지가 제일 힘들었던 것 같아요. 재귀 파트에서 메모이제이션 개념에 대해서 예제를 통해 쉽게 다루어주신다면 종만북을 읽을 때 많은 도움이 될 것 같습니다.

baekjoon   8년 전

재귀 호출이나 DP에 ㄷㅐ해서는 전혀 생각하지도 못하고 있었네요.

혹시 어려웠거나 기초 같은 느낌이 드는 재귀 호출, DP 문제 추천해줄 수 있나요? 추천해주시면, 그런 문제랑 비슷한 느낌을 풀어보는 것을 넣어볼까 합니다.

이 사이트 문제가 너무 많아서 뭐가 있는지 너무 헷갈려요

Hibbah   8년 전

쉬운 재귀 문제들이 BOJ에 굉장히 많았던 것 같은데,

2차원 테이블을 이용한다거나, string을 좀 잘 써야한다거나.. 등등

몇 가지 부가적인 기술(?) 조차 필요하지 않는 정말 완전 재귀 입문과 같은 문제를

방금 아주 조금(..) 찾아봤는데,

1,2,3더하기, 부분집합의 합도 괜찮을 것 같아요 (부분집합의 합은 입문자에게 조금 어려울 수도 있을 것 같네요)

그리고, 별로 있지도 않은 제 경험상. 재귀함수를 처음 설계할 때 반환형이 있는것과 없는것에 따라서

처음 배우시는 분들이 좀 많이 어려워하는걸 봤었는데, 반환형이 없는 형태로 처음 시작할 때 좀 더 쉽게 이해했던 것 같아요

앞에서 언급드린 두 문제에 대한 코드로 예를 들자면,


# 1,2,3더하기

1. void type

2. int type

# 부분집합의 합

1. void type

2. int type


정도가 될 것 같네요.

ojh3316   8년 전

@baekjoon 님, 그책 나오면 저한테 알려 주세요^^

제 친구들 몇몇이 C언어 같은거 배우고 싶다고 저한테 말하는 애들이 있거든요

그래서 그책도 알려줄겸 백준도 알려 줄려고요~

꼭 알려 주세요~

baekjoon   8년 전

아마 책이 나오면 이 사이트가 광고로 도배 될거에요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

baekjoon   8년 전

음 혹시 재귀 호출을 하는데, stop 조건을 bool로 이용하는거에 대해서 아는 분 계신가요?

예를 들면,

bool go(int x) {

if (x == n) { // 정답을 찾음

return true;

}

// 뭔가 처리를 함

if (go(x+1)) {

return true;

}

//여기서도 뭔가 처리를 함

return false;

}

이런 형식이요 ㅋㅋㅋㅋ

jays   8년 전

@hongjun7

친절하게 링크 걸어주셨네요. 감사히 잘 보겠습니다 :)


댓글을 작성하려면 로그인해야 합니다.