Successfully reported this slideshow.
Your SlideShare is downloading. ×

두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 27 Ad

More Related Content

Advertisement

Similar to 두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분! (20)

Advertisement

두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!

  1. 1. PS가 이렇게 해롭습니다, 여러분! 서울대학교 박성원
  2. 2. 개요
  3. 3. 이 발표는 • 일반적인 SW개발의 시각에서 본 • PS를 열심히 하면 무엇을 놓치게 되는지 • PS를 열심히 하면 무엇이 좋은지 1
  4. 4. 이 발표는 • PS를 막 시작하신 분들이 들어도 좋고 • PS를 열심히 하시는 분들이 들어도 좋고 • 취업준비 하시는 분들이 들어도 좋고 • 사실 아무나 들어도 상관없겠네요 1
  5. 5. 이 발표는 • 당연히 제 개인적인 생각 • 취사선택해서 들어주시길 바랍니다 1
  6. 6. 발표자 소개 Problem Solving • handle : ntopia • 학생 때 KOI를 했으나 별 성과는 없었음 • 2016 ACM-ICPC Daejeon Regional Contest • PLEASE OPEN TESTDATA, 3등 • 2016 ACM-ICPC Bangkok Regional Contest • ntopia never dies, 5등 2
  7. 7. 발표자 소개 Working • 애니파크 (2010.01. ~ 2013.08.) • 산업기능요원 • 옐로에그 (2013.10. ~ ) • 창업 2
  8. 8. PS란? • 자료구조, 알고리즘 이론을 배우고 • 이론을 응용해 알고리즘 문제를 풀고 • Programming Language 로 구현하여 • 맞았습니다!! 를 받는 것 [?] • 이것으로 경쟁하는 대회도 많이 있다 • Competitive Programming 3
  9. 9. 놓치는 것
  10. 10. 코드 가독성 • 거의 대부분의 SW개발은 혼자가 아닌 여럿이서 • 남이 내 코드를 쉽게 이해할 수 있어야 함 • 문서화가 필요한 부분엔 문서화도 꼼꼼히 • 하지만 4
  11. 11. 코드 가독성 • 통일되지 않은 스타일 • 인덴트 무시 • 무의미한 변수/함수 이름 • 자기 자신만 알아볼 수 있는 코드 4
  12. 12. 코드 가독성 • 대회 땐 빠르게 짜야하기 때문에 불가피한 부분 • 하지만 • 자기도 모르는 사이에 이런 스타일이 고착됨 • 대회 중이 아닌 여유로울 때 읽기 쉬운 코드를 짜보는 연습 추천! 4
  13. 13. 설계 • 알고리즘 문제를 풀 때는 • 문제에서 요구하는 풀이 하나를 위한 로직을 만듦 • 하지만 • 빅-픽쳐를 그려볼 기회가 적다 5
  14. 14. 설계 • 설계의 큰 그림을 그려볼 기회가 적음 • 남이 만든 코드를 유연하게 붙여 쓰는 일도 적음 • 스펙이 변경되는 경우를 생각하지 않음 • 유지보수를 생각하지 않음 5
  15. 15. 정제된 문제 • 보통의 알고리즘 문제에는 • 문제 설명, 입출력 형식, 제한 조건 • 명확하게 정리되어있음 • 하지만 6
  16. 16. 정제된 문제 • 현실은 시궁창 • 정제된 설명, 제한 조건이 없는 경우가 많다 • 있어도 자주 변경된다 • 문제를 해결하는 방법도 훨씬 다양하다 • 회피하기, 감추기, 스펙을 바꾸기, 등등... • 같은 문제도 팀의 상황에 따라 다르게 해결함 6
  17. 17. 얻는 것
  18. 18. 로직 구현력 • 특정한 일 한가지를 하는 로직을 구현하는 능력 • 많이 좋아짐 • PS의 세계에는 까다로운 구현 문제가 많다 • 이런 문제들을 두려워하지 말고 제끼지 말고 • 꼭 풀어보면 좋음 • ICPC에도 빡센 구현문제가 한두문제씩은 꼭 나옴 • https://www.acmicpc.net/board/view/11969 7
  19. 19. 시간,공간에 대한 감 • 실행시간에 대한 실질적인 감 • TLE를 열심히 쌓다보면 • 입력의 크기가 A고 내 코드의 시간복잡도가 대충 B면 • 이 코드는 대충 x초 안에 돌아가겠구나 • 메모리 사용량에 대한 실질적인 감 • RE, MLE를 열심히 쌓다보면 • 메모리를 이렇게 많이 잡으면 안되는구나 • 이렇게 짜면 메모리가 터지는구나 • 을 쉽게 체득할 수 있다 8
  20. 20. 경계조건 • 경계조건을 항상 염두에 두고 코딩하게 됨 • 이것을 놓쳐 생기는 버그가 꽤 많다 • Integer overflow • Array indexing error • 등등... 9
  21. 21. 문제해결 전략 • 다양한 알고리즘 문제를 풀다보면 • 이건 작은 문제로 쪼개서 해결하는게 좋겠구나 • 이건 거꾸로 생각해보는게 좋겠구나 • 등등의 느껴지는 바가 있다 • 실제 SW개발에서도 이런 전략은 유효함 • 알고리즘 문제를 풀 때 • 풀이를 이해하는 것을 넘어서 • 어떻게 이런 풀이가 나오게 되었는지 생각의 과정을 잘 살 펴보는 것이 중요 10
  22. 22. 마음가짐 • PS는 실패의 연속 • 내가 틀릴 수 있다는 사실을 자연스럽게 학습 • 정말 이렇게 어처구니 없게 틀릴 수 있구나 • 내가 이런 실수를 할 수도 있구나 • 겸손과는 약간 다른 듯? • 실패를 거울삼아 공부하고 수련하기 • 이런 경험들이 실제 SW를 개발할 때도 이어짐 11
  23. 23. 기타 • 자료구조 지식 • 아주 간간히 쓰이는 지식 • DP • Network flow • 수학 : 기하, 정수론, 확률, 선형대수, ... • 등등... • 재미 12
  24. 24. 정리
  25. 25. 정리 • PS를 열심히 하고 계신 분들, 혹은 시작하실 분 • PS가 재미있다면 계속 열심히 하면 됩니다! • 다만 오늘 발표한 내용을 머릿속 어딘가에 담아두 신다면 좋을 것 같네요! 13
  26. 26. 정리 • PS 공부하다 질리면 딴짓도 많이 하세요 • CSE 에는 재미있는 분야가 많습니다 • 여러 분야를 경험해두면 나중에 피와 살이 됩니다 • 취직 때문에 어쩔 수 없이 PS를 하는 분들 • 면접을 볼 수 있을 정도로만 준비하고 • 그 이후에 PS에 흥미가 느껴지지 않는다면 • 다른 분야에 노력을 기울이는 것이 좋습니다 13
  27. 27. 감사합니다.

×