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