코딩테스트를 처음 공부하는 분들을 위한 강의 입니다.
★★아래 필수 확인(영상강의,저자소통방,저자카페 링크 있음)★★
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
코딩테스트를 처음 공부하는 분들을 위한 강의 입니다.
★★아래 필수 확인(영상강의,저자소통방,저자카페 링크 있음)★★
유투브 강의 : https://youtu.be/wtBUKpXPN4Q?si=kNdmLgrpQm7xB-j_
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
오늘은 재귀에 대해 설명 드리겠습니다.
커리큘럼은 아래와 같습니다.
재귀의 정의
재귀의 예시 - 팩토리얼
재귀의 예시 - 하노이 탑
재귀를 사용할 때 조심해야 하는 경우
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
코딩테스트를 처음 공부하는 분들을 위한 강의 입니다.
★★아래 필수 확인(영상강의,저자소통방,저자카페 링크 있음)★★
유투브 강의 : https://youtu.be/wtBUKpXPN4Q?si=kNdmLgrpQm7xB-j_
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
오늘은 재귀에 대해 설명 드리겠습니다.
커리큘럼은 아래와 같습니다.
재귀의 정의
재귀의 예시 - 팩토리얼
재귀의 예시 - 하노이 탑
재귀를 사용할 때 조심해야 하는 경우
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
성공한 관리자가 되기 위해서는 다른 사람보다 뛰어난 문제 인식능력 있어야 합니다. 그리고 이를 해결하는 역량을 갖추어야 합니다. 이러한 역량을 가추기 위한 체계적 기법에 대한 강의 자료를 공유합니다.
www.blogmba.com 에 오시면 보다 많은 정보를 공유 할 수 있습니다.
How to generate PowerPoint slides Non-manually using RSatoshi Kato
Introduction to:
- Basic idea and procedure of {officer} package
- Getting started: Embedding texts, tables and figures in slides
- PowerPoint Structure: Layouts and Placeholders
- Making a template for specific layouts
- Making a template for your own slide-layouts
Resources are avail at: https://github.com/katokohaku/powerpoint_with_officer
2018년 6월 30일 싸이그램즈 2018에서 발표했던 자료입니다.
NLP 입문자를 위해 텍스트 데이터 전처리, 벡터화, 시각화에 대해 간략하게 소개합니다.
단어 벡터화 기법으로 Bag of Words, n-grams, TF-IDF, Word2Vec에 대한 기초 개념을 다룹니다.
"손코딩뇌컴파일눈디버깅" 모임을 소개합니다.
백문이 불여일런, 트라이얼앤에러(Trial and Error) 식의 몹쓸 교육을 받아 온 개발자들이 코딩하기 전에 신중하고 꼼꼼하게 생각해보기란 쉽지 않습니다.
개발 시간 중 디버깅 시간이 절반 이상을 차지하고 있는 실정에 버그를 줄이기 위해 TDD니 유닛테스트니 많은 방법들이 개발되고 있지만 가장 일차적으로 중요한 것은 개발자들이 꼼꼼히 따져보는 것이 아니겠는지요?
미국의 선진 SW회사들은 이미 화이트보드에 PS문제를 푸는 것을 인터뷰 방식으로 채택하고 있습니다. 이는 이와 같은 풀이 방식이 개발자들의 기본 역량을 측정하기에 알맞은 지표라는 것이고, 개발자들이 기본적으로 갖춰야 할 역량이기도 하다는 것 입니다.
또한 자신의 생각을 명확하게 정리하고 다른 사람이 이해할 수 있도록 전달하는 Communication Skill 도 개발자가 갖춰야 할 역량 중 하나 입니다. 알고리즘을 어떻게 구현할 것인가를 팀원들과 소통하면서 자연스럽게 생각을 정리하고 전달하는 연습도 할 수 있습니다.
컴퓨터에 앉아 코딩하기 전 펜과 종이를 들고 눈과 머리와 손을 굴려 보시는 것은 어떠신지요??
[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기Joeun Park
서울 코엑스에서 진행된 파이콘 한국 2018에서 8월 19일에 발표한 내용입니다.
데이터 전처리와 Feature Engineering에 대해 다룹니다.
[파이콘 한국 2018 프로그램 | 땀내를 줄이는 Data와 Feature 다루기](https://www.pycon.kr/2018/program/47)
이 발표내용은 8월 17일 금요일에 진행되었던 다음 2개의 튜토리얼을 바탕으로 작성되었습니다.
* [공공데이터로 파이썬 데이터 분석 입문하기(3시간) — 파이콘 한국 2018](https://www.pycon.kr/2018/program/tutorial/6)
* [청와대 국민청원 데이터로 파이썬 자연어처리 입문하기(3시간) — 파이콘 한국 2018](https://www.pycon.kr/2018/program/tutorial/7)
How to improve your code quality? The answer is continuous refactoring. Learn more about refactoring. Know the most frequent code smells (antipatterns), telling when to refactor. Go through the catalog of well-known refactorings, telling how to improve your code.
성공한 관리자가 되기 위해서는 다른 사람보다 뛰어난 문제 인식능력 있어야 합니다. 그리고 이를 해결하는 역량을 갖추어야 합니다. 이러한 역량을 가추기 위한 체계적 기법에 대한 강의 자료를 공유합니다.
www.blogmba.com 에 오시면 보다 많은 정보를 공유 할 수 있습니다.
How to generate PowerPoint slides Non-manually using RSatoshi Kato
Introduction to:
- Basic idea and procedure of {officer} package
- Getting started: Embedding texts, tables and figures in slides
- PowerPoint Structure: Layouts and Placeholders
- Making a template for specific layouts
- Making a template for your own slide-layouts
Resources are avail at: https://github.com/katokohaku/powerpoint_with_officer
2018년 6월 30일 싸이그램즈 2018에서 발표했던 자료입니다.
NLP 입문자를 위해 텍스트 데이터 전처리, 벡터화, 시각화에 대해 간략하게 소개합니다.
단어 벡터화 기법으로 Bag of Words, n-grams, TF-IDF, Word2Vec에 대한 기초 개념을 다룹니다.
"손코딩뇌컴파일눈디버깅" 모임을 소개합니다.
백문이 불여일런, 트라이얼앤에러(Trial and Error) 식의 몹쓸 교육을 받아 온 개발자들이 코딩하기 전에 신중하고 꼼꼼하게 생각해보기란 쉽지 않습니다.
개발 시간 중 디버깅 시간이 절반 이상을 차지하고 있는 실정에 버그를 줄이기 위해 TDD니 유닛테스트니 많은 방법들이 개발되고 있지만 가장 일차적으로 중요한 것은 개발자들이 꼼꼼히 따져보는 것이 아니겠는지요?
미국의 선진 SW회사들은 이미 화이트보드에 PS문제를 푸는 것을 인터뷰 방식으로 채택하고 있습니다. 이는 이와 같은 풀이 방식이 개발자들의 기본 역량을 측정하기에 알맞은 지표라는 것이고, 개발자들이 기본적으로 갖춰야 할 역량이기도 하다는 것 입니다.
또한 자신의 생각을 명확하게 정리하고 다른 사람이 이해할 수 있도록 전달하는 Communication Skill 도 개발자가 갖춰야 할 역량 중 하나 입니다. 알고리즘을 어떻게 구현할 것인가를 팀원들과 소통하면서 자연스럽게 생각을 정리하고 전달하는 연습도 할 수 있습니다.
컴퓨터에 앉아 코딩하기 전 펜과 종이를 들고 눈과 머리와 손을 굴려 보시는 것은 어떠신지요??
[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기Joeun Park
서울 코엑스에서 진행된 파이콘 한국 2018에서 8월 19일에 발표한 내용입니다.
데이터 전처리와 Feature Engineering에 대해 다룹니다.
[파이콘 한국 2018 프로그램 | 땀내를 줄이는 Data와 Feature 다루기](https://www.pycon.kr/2018/program/47)
이 발표내용은 8월 17일 금요일에 진행되었던 다음 2개의 튜토리얼을 바탕으로 작성되었습니다.
* [공공데이터로 파이썬 데이터 분석 입문하기(3시간) — 파이콘 한국 2018](https://www.pycon.kr/2018/program/tutorial/6)
* [청와대 국민청원 데이터로 파이썬 자연어처리 입문하기(3시간) — 파이콘 한국 2018](https://www.pycon.kr/2018/program/tutorial/7)
How to improve your code quality? The answer is continuous refactoring. Learn more about refactoring. Know the most frequent code smells (antipatterns), telling when to refactor. Go through the catalog of well-known refactorings, telling how to improve your code.
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기Ahreum Kim
2018. 11. 03 'FEConf 2018' 발표자료입니다.
---
처음으로 프론트엔드 프로젝트에 (유닛)테스트코드를 작성해보며 느낀 경험을 공유합니다. 어떤 관점으로 접근 했는지부터, 테스트코드 작성을 하며 만난 고민과 해결책은 어떤 방식으로 풀어 냈는지 코드와 함께 다뤄보려 합니다. 저는 테스트 숙련자가 아니지만, 저와 비슷한 위치에서 테스트에 입문하시려는 분들께 어떻게 테스트에 입문하고 코드를 작성했는지에 대해서 구체적인 경험을 공유하는 것도 의미있을 거라 생각했습니다. 제가 드릴 얘기들이 정답이 아닐 수 있지만, 더 좋은 방향을 고민하면서 같이 생각해볼 수 있다면 좋겠습니다.
10. 10
1. 이 책을 쓰게 된 이유
2. 이 책의 특징과 장점, 대상 독자
3. 코딩 테스트 마인드셋
4. 2023 코딩 테스트 트렌드, 2024는?
5. 자료구조 + 알고리즘 주요 개념 4가지
6. 코딩 테스트 주요 문제 풀이 5가지
11. 2. 이 책의 특징과 장점, 대상 독자
● 파이썬의 기본 문법을 이해한 사람 대상으로 집필
○ 파이썬 기본 문법이 약해도 충분히 공부할 수 있도록 지원
○ 깃허브에 충분한 자료를 지원
11
기본적인 자료구조/알고리즘 코드
꼭 알아야 할 개념이 포함된 코드
(성능측정/자주실수하는 코드 등)
책에 있는 문제의 정답코드
12. 2. 이 책의 특징과 장점, 대상 독자
● 그림을 충분히 사용
○ 알고리즘, 입력값을 받고 원하는 출력값을 만드는 과정
○ 이 과정을 충분히 도식화
12
13. 2. 이 책의 특징과 장점, 대상 독자
● 바로 정답 코드를 해석하지 않았음
○ 중요한 건 문제를 분석하고 해석하는 능력
■ 데이터가 제어되는 과정
■ 문제 분석, 설계할 수 있는 능력을 공부할 수 있도록 배려
13
14. 2. 이 책의 특징과 장점, 대상 독자
● 알고리즘 및 자료구조 설명
○ 연산의 흐름을 충분히 파악할 수 있도록 각 과정들을 상세히 설명
● 개념 설명
○ 바로 기출 문제로 가지 않음, 중간 문제를 반드시 배치(저자 기출 문제)
■ 개념을 충분히 익히면서 구현해볼 수 있도록 배려
○ 실전 문제는 프로그래머스에서 검수한 문제를 다루고 있음
■ 트렌드를 반영하고 있어 감각을 익히기 좋음
14
15. 15
1. 이 책을 쓰게 된 이유
2. 이 책의 특징과 장점, 대상 독자
3. 코딩 테스트 마인드셋
4. 2023 코딩 테스트 트렌드, 2024는?
5. 자료구조 + 알고리즘 주요 개념 4가지
6. 코딩 테스트 주요 문제 풀이 5가지
16. 3. 코딩 테스트 마인드셋
16
● 조급하게 하지 말자
○ 어차피 단기간에 할 수 없음
○ 조급하면 소중한 시간만 낭비할 따름
○ 최소한 3개월은 필요, 시간이 충분히 필요함을 인정하고 인내를 가지고 준비
17. 3. 코딩 테스트 마인드셋
17
● 모든 알고리즘을 다 알아야 한다는 생각을 버리자
○ 많이 알면 좋음(당연)
○ but… 알고리즘은 끝이 없고, 공부 시간은 제한되어 있음
■ 전략적으로 접근 ➝ 트렌드는 많이 바뀌지 않음 ➝ 빈출 알고리즘 위주로 공부
18. 3. 코딩 테스트 마인드셋
18
● 사공이 많으면 배가 산으로 가죠
○ 주변 친구의 말 너무 따르지 말 것
○ 주관을 가지고 공부
○ 대부분 나와 실력 차이가 그렇게 많이 나지 않음
○ 목표를 명확히, 내가 할 것들에 집중, 꾸준히
19. 3. 코딩 테스트 마인드셋
19
● 피드백 받기를 두려워 하지 말자
○ 내가 공부한 내용을 많이 공개하자, 피드백을 많이 받자
○ 질문을 많이 하자(질문 가이드)
■ 질문을 정리하고 공유하는 건 귀찮다, 근데 공부가 원래 귀찮다(인정하자)
○ 피드백을 위해 들이는 시간을 아까워 하지 말자
■ 피드백을 통해 잃는 것보다 얻는 게 더 크다
■ 질문/요청을 작성하면 본인이 한번 읽어보자
20. 20
1. 이 책을 쓰게 된 이유
2. 이 책의 특징과 장점, 대상 독자
3. 코딩 테스트 마인드셋
4. 2023 코딩 테스트 트렌드, 2024는?
5. 자료구조 + 알고리즘 주요 개념 4가지
6. 코딩 테스트 주요 문제 풀이 5가지
21. 4. 2023 코딩 테스트 트렌드, 2024는?
21
● 코딩 테스트 경향은 바뀌지 않음
● 코딩 테스트는 개발자의 기본 능력을 평가하는 시험
● 특정 알고리즘을 알아야 풀 수 있는 문제 X
● 문제를 정확히 이해하고 요구사항을 빠짐없이 구현하는 문제 O
22. 4. 2023 코딩 테스트 트렌드, 2024는?
22
● 탐색
○ 단순한 반복 탐색 多
○ DFS(스택, 재귀) / BFS / 백트래킹 多
● 대표 문제(풀어보면 좋음)(책에도 있음)
○ 반복 탐색 문제 : 모의고사(문제 4, 정답코드)
○ DFS 문제 : 네트워크(문제 43, 정답코드) , 전력망 둘로 나누기(문제 46, 정답코드)
○ BFS 문제 : 경주로 건설(문제 45, 정답코드)
○ 백트래킹 문제 : 스도쿠 퍼즐(문제 48,정답코드), 피로도(문제 49, 정답코드)
23. 4. 2023 코딩 테스트 트렌드, 2024는?
23
● 시뮬레이션
○ 특정 알고리즘 적용 X
○ 이해한 대로 구현 O
○ 좌표 / 배열 / 구현
● 대표 문제(풀어보면 좋음)(책에도 있음)
○ 좌표 문제 : 캐릭터의 좌표(문제 69, 정답 코드)
○ 배열 문제 : 배열 회전(문제 62, 정답 코드), 전치 행렬(문제 63, 정답 코드)
○ 구현 문제 : 카펫(문제 67, 정답 코드), 점프와 순간이동(문제 68, 정답 코드)
24. 4. 2023 코딩 테스트 트렌드, 2024는?
24
● 자료구조 응용
○ 스택 / 큐 / 딕셔너리 / 우선순위 큐
○ 포인트 : 동일한 동작을 하지만 성능이 다른 메서드 정리 필요
■ 메서드 선택이 당락 결정
■ 주요 메서드 : pop(0) vs popleft() , append() vs + 연산자, join() vs + 연산자
● 대표 문제(풀어보면 좋음)(책에도 있음)
○ 스택 문제 : 짝지어 제거하기(문제 11, 정답 코드), 주식 가격(문제 12, 정답 코드)
○ 큐 문제 : 요세푸스 문제(문제 15, 정답 코드), 기능 개발(문제 16, 정답 코드)
○ 딕셔너리 문제 : 완주 하지 못한 선수(문제 20, 정답 코드), 오픈 채팅방(문제 22, 정답 코드)
○ 우선순위 큐 문제 : 지형 이동(문제 61, 정답 코드)
25. 4. 2023 코딩 테스트 트렌드, 2024는?
25
● 기타 알고리즘
○ 고득점을 위해 필요한 알고리즘, but…
○ 코딩 테스트에서 꼭 고득점을 노릴 필요는 없음
○ 만약 더 공부해야 한다면…
■ 최단 경로 / 트리 / 그리디 / 동적 계획법 등의 알고리즘
● 대표 문제(풀어보면 좋음)(책에도 있음)
○ 최단 경로 문제 : 다익스트라 알고리즘(문제 40, 정답 코드), 배달(문제 44, 정답 코드)
○ 그리디 문제 : 거스름돈 주기(문제 80, 정답 코드), 기지국 설치(문제 85, 정답 코드)
○ 트리 문제 : 트리 순회(문제 26, 정답 코드), 예상 대진표(문제 28, 정답 코드)
○ 동적 계획법 문제 : 2xn 타일링(문제 74, 정답 코드), 도둑질(문제 77, 정답 코드)
26. 26
1. 이 책을 쓰게 된 이유
2. 이 책의 특징과 장점, 대상 독자
3. 코딩 테스트 마인드셋
4. 2023 코딩 테스트 트렌드, 2024는?
5. 자료구조 + 알고리즘 주요 개념 4가지
6. 코딩 테스트 주요 문제 풀이 5가지
27. 5. 자료구조 + 알고리즘 주요 개념 4가지
27
● 시간 복잡도time complexity
● 코딩 테스트에서 왜 시간 복잡도가 중요한가?
● 시간 복잡도를 어떻게 측정할 것인가?(기본)
○ 점근적 표기법
● 시간 복잡도를 코딩 테스트에 어떻게 적용할 것인가?(실전)
○ 연산 횟수로 알고리즘 선택
○ 입력값으로 알고리즘 선택
28. 5. 자료구조 + 알고리즘 주요 개념 4가지
28
● DFS and BFS
○ DFS와 BFS의 개념, 구현, 응용
○ DFS와 BFS의 비교
29. 5. 자료구조 + 알고리즘 주요 개념 4가지
29
● 다익스트라
○ 최단 경로를 구한다는 것은 무엇인가?
○ 다익스트라의 목적은 무엇인가?
○ 다익스트라의 세부 동작
○ 다익스트라의 한계
■ 벨만-포드 알고리즘
30. 5. 자료구조 + 알고리즘 주요 개념 4가지
30
시간 복잡도
왜 코딩 테스트에서 시간 복잡도가 중요할까?
31. 5. 자료구조 + 알고리즘 주요 개념 4가지
31
● 코딩테스트에서 합격하려면 “정확성”뿐 아니라 “효율성”까지 만족해야 함, 시간복잡도는 “효율성”을 측정하는 수단
○ “정확성”은 각 입력값에 대해 실행한 코드와 테스트 케이스의 출력값을 비교해서 일치하는지 확인
○ “효율성”은 출제자가 의도하는 시간복잡도 내로 코드가 수행되는지 확인
기준 수행시간
코드제출 수행시간 측정
비교
32. 5. 자료구조 + 알고리즘 주요 개념 4가지
32
시간 복잡도
어떻게 측정할 것인가?
33. 5. 자료구조 + 알고리즘 주요 개념 4가지
33
● 성능은 “연산 횟수”를 기준으로 측정
코드 실행
입력 출력
코드 실행하는 동안 연산횟수를 측정
34. 5. 자료구조 + 알고리즘 주요 개념 4가지
34
● 성능은 “연산 횟수”를 기준으로 측정 - 간단한 예시(순차탐색으로 배열 원소 찾기)
1 4 2 3 7 8 9 5
배열 원소에 내가 원하는 값이 있는지 탐색
케이스 연산 횟수
찾는 원소가 맨 처음에 있는 경우 1
찾는원소가 중간에 있는 경우 4
찾는 원소가 없는 경우 8
연산횟수 측정
어느정도 연산이 소요되는지는 알수있다. 하지만 그래서 성능이 정
확히 어떻다는 것인가?
35. 5. 자료구조 + 알고리즘 주요 개념 4가지
35
● 시간 복잡도는 “연산 횟수”를 기준으로 성능을 일반화 함
● 세부적인 “연산 횟수”를 모두 표기하는 것보다 “영향을 가장 많이 끼치는 상한”을 표시(점근적 표기법의 Big-O 표기법)
연산횟수는 n^2 + 3n + 5
n^2
3n
1. n이 커질수록 차수는 의미없음
2. n이 커질수록 3n과 5는 무시할 수 있음
즉 n^2이 절대적으로 많은 영향을 미침
시간 복잡도는 Big-O 표기로 O(n^2)가
됨
36. 5. 자료구조 + 알고리즘 주요 개념 4가지
36
● 진짜 “영향을 끼치는 부분”만 표시해도 문제 없을까?
복잡도 사용되는 예시 연산횟수
10 20
O(1) 배열의 인덱스를 통해서 원소접
근
1 1
O(logn) 이진탐색 1 1
O(n) 순차탐색 10 20
O(nlogn) 정렬 10 26
O(n^2) 행렬곱셈, 다항식 계산 100 400
O(2^n) 부분집합 구하기, 하노이 1024 1,048,576
O(N!) 순열 생성, 외판원 문제(TSP) 3,628,800 2,432,902,008,176,640,000
x좌표가 다름을 유의
전체 그래프
복잡도 O(nlogn 미만 그래프)
37. 5. 자료구조 + 알고리즘 주요 개념 4가지
37
● 빅오 표기법을 연습해 봅시다.
선형탐색,O(x)
행렬곱셈O(x^2)
부분 집합,O(2^x)
트리탐색, O(logx)
38. 5. 자료구조 + 알고리즘 주요 개념 4가지
38
시간 복잡도
어떻게 사용할 것인가?
39. ● 문제에 주어지는 입력값으로 사용할 수 있는 알고리즘 추정 가능
● 입력값은 많은 힌트를 제공 함. 하지만 시간복잡도를 알아야 이 힌트를 활용할 수 있음.
5. 자료구조 + 알고리즘 주요 개념 4가지
39
O(N^2) 알고리즘으로 풀면 통과하지 못하겠구나!
정답 코드
복잡한 알고리즘을 생각하지 않고, 그냥 구현하
면 되겠구나!
정답 코드
40. 5. 자료구조 + 알고리즘 주요 개념 4가지
● 책에 있는 각 자료구조/알고리즘의 시간복잡도를 정리하는게 최우선 입니다!
● 동일한 동작을 하는데 성능이 다른 메서드도 정리가 필요합니다!
● 문제 입력값 분석시 여유 있게 초당 연산횟수를 1,000만 ~ 3,000만 이라고 생각하면 됩니다.
40
연산 복잡도
문자열에 문자 추가 append()는 O(1)
+연산자는 O(N)
맨 앞의 원소삭제 리스트의 pop(0)는 O(N)
덱의 popleft()는 O(1)
기존 데이터에 원소 삽입시 정렬
유지
리스트는 O(NlogN)
힙큐는 O(logN)
원소 존재여부 확인 리스트는 O(N)
집합/딕셔너리는 O(1)
문자열 여러개를 한번에 합칠때 +연산자는 O(N^2)
join()은 O(N)
41. 5. 자료구조 + 알고리즘 주요 개념 4가지
41
DFS와 BFS
왜 코딩테스트에 많이 나오는가?
42. 5. 자료구조 + 알고리즘 주요 개념 4가지
42
● 코딩테스트는 “알고리즘 지식 평가”가 목적이 아닌, “문제 해결 능력”을 평가하는 시험
● “DFS와 BFS”는 기본적인 자료구조 지식만 있으면 구현할 수 있는 알고리즘이면서, 문제 분석이 제대로 되지 않으면 실수하
는 경우가 많아서 시험에 적합
스택 큐
def a():
a()
재귀
먼저 공부하기
DFS와 BFS중 어떤걸 사용할 것인가?
- 최단경로를 찾는 문제는 BFS
- 백트레킹이 필요한 문제는 DFS
문제 분석하기
43. 5. 자료구조 + 알고리즘 주요 개념 4가지
43
DFS와 BFS
반드시 알아야 할 사전지식
44. ● 사진 지식 공부하기 - 스택과 큐
5. 자료구조 + 알고리즘 주요 개념 4가지
44
스택
FILO
코드 푸시 푸시 푸시 팝 팝 팝
큐
FIFO
코드
푸시 푸시 푸시 팝 팝 팝
45. ● 사진 지식 공부하기 - 함수호출흐름 및 재귀함수
5. 자료구조 + 알고리즘 주요 개념 4가지
① functionA 호출
② functionB 호출
③ functionB 다음으
로 감
함수호출 흐름 재귀함수
재귀호출
종료조건
47. ● DFS(깊이우선탐색)
○ 시작 노드를 정합니다.
○ 더 이상 탐색할 노드가 없을 때 까지 갑니다.
○ 더 이상 탐색할 노드가 없으면 최근에 방문할 노드로 되돌아가서 가지 않은 노드로 탐색을 계속 합니다.(백트래킹)
5. 자료구조 + 알고리즘 주요 개념 4가지
백트래킹
백트래킹
48. ● DFS(깊이우선탐색) 구현하기
○ DFS의 핵심인 백트래킹 부터 봅시다.
○ 백트래킹을 어떻게 구현해야 할까요? -> 스택을 활용 -> 콜스택 자체가 스택이므로 재귀를 활용!
스택을 활용한 DFS 예시코드 재귀를 활용한 DFS 예시코드
5. 자료구조 + 알고리즘 주요 개념 4가지
A
B
D
A
B
D
D
A
B
B
최근 방문 노드
최근 방문 노드
49. ● DFS(깊이우선탐색) 구현하기
○ DFS를 재귀로 구현해봅시다
■ 시작노드를 정하고, 아직 방문하지 않은 노드를 탐색하는 과정을 재귀적으로 반복합니다.
■ 더이상 방문할 노드가 없다면, 최근방문한 노드를 방문해서 위 과정을 반복합니다.
5. 자료구조 + 알고리즘 주요 개념 4가지
그래프로 나타내면
1번 노드를 시작으로 DFS
방문
인정한 노드가 있을 경우 해
당 노드를 dfs(재귀)
55. ● BFS(너비우선탐색)
○ 시작 노드를 정합니다.
○ 방문한 노드와 인접한 노드를 방문합니다.
○ 각 방문한 노드의 인접한 노드를 모두 방문하고, 이를 반복합니다.
5. 자료구조 + 알고리즘 주요 개념 4가지
56. ● BFS(너비우선탐색) 구현하기
○ BFS의 핵심인 인접한 노드를 모두 방문하는 걸 봅시다.
○ 인정합 노드를 방문하는 동작은-> 큐를 활용 하면 됩니다.
큐를 활용한 BFS 예시코드
5. 자료구조 + 알고리즘 주요 개념 4가지
B
C
B
D
B
E
D
E
C
C D D
E
E
57. ● BFS(너비우선탐색) 구현하기
○ BFS를 재귀로 구현해봅시다
■ 시작노드를 큐에 넣고 방문 처리합니다.
■ 큐에에 노드를 하나꺼내고 방문X 한 노드중 인접한 노드를 방문처리하고 푸시합니다. 이를 반복합니다.
5. 자료구조 + 알고리즘 주요 개념 4가지
그래프로 표현하면
1번 노드를 시작으로 BFS
60. 5. 자료구조 + 알고리즘 주요 개념 4가지
60
DFS와 BFS
DFS vs BFS
61. ● DFS(깊이우선탐색) vs BFS(너비우선탐색)
○ DFS만 백트래킹이 있다.
○ BFS가 찾은 해는 시작노드와 가장 가까운 해 라는 것이 보장 된다. (최단 경로)
○ BFS는 인접한 노드를 모두 큐에 담는 방식이다(메모리를 더 많이 사용함)
5. 자료구조 + 알고리즘 주요 개념 4가지
해
해
BFS가 찾는해
DFS가 찾는해
앞 뒤
앞 뒤 앞 뒤
2개 동전 앞뒤 모든 경우 확인-백트래킹 해가 2개있는 경우 DFS vs BFS
62. 5. 자료구조 + 알고리즘 주요 개념 4가지
62
다익스트라 알고리즘
최단경로란 무엇인가?
63. 5. 자료구조 + 알고리즘 주요 개념 4가지
63
● 최단경로란 무엇인가?
○ 출발지 부터 목적지 까지 가는데 필요한 가중치의 합이 최소인 경로
A C
B
E
D
2
5
6 8
4
1
2
4
왼쪽 그래프는 이렇게 해석 할수 있다
- A에서 D까지 최단 경로는 {A, E, C, D}이다.
- A에서 D까지 최단 경로 길이는 11이다.
- A에서 D까지 최단 경로로 갈때 C의 직전
노드는 E이다.
- A에서 C까지 최단 경로는 {A,E,C}이다.
- A에서 D까지 최단 경로는
A에서 C까지 최단 경로에 C에서 D까지
가중치를 더한 것과 같다.
64. ● 최단경로 구하기전 고민할 것(과정을 어떻게 표기할 것인가?)
○ 효율적으로 구하기 위해 그래프에 아래와 같이 (최단경로길이/최단경로)를 표기
5. 자료구조 + 알고리즘 주요 개념 4가지
64
A D
B
C
20
15 900
50
노드 길이 직전
노드
A 0 A
B INF X
C INF X
D INF X
최단경로를 구하기 위해 초기화!
65. 5. 자료구조 + 알고리즘 주요 개념 4가지
65
다익스트라 알고리즘
최단경로를 어떻게 구할 것인가?
66. ● 최단경로를 실제 구해보자(어떻게 구할 것인가? 1/2)
○ 최단경로 배열에서 길이가 최소인 정점은 추후 갱신될 여지가 없음
■ 이를 “거치는 노드”로 정의
○ 현재까지 구한 최단경로의 길이와, 거치는 노드를 통한 최단경로를 비교해서 최소로 갱신
5. 자료구조 + 알고리즘 주요 개념 4가지
66
A F
B
C
20
15 900
50
노드 길이 직전
노드
A 0 A
B INF X
C INF X
D INF X
현재 최단경로 배열에서 길이가 최소,”거치는 노드”
-> 거치는 노드를 통한 경로를 체크하는게 최선(그리디적 선택)
각 최단경로는 “거치는 노드”보다 적을수 없음
-> 조합해도 “거치는 노드”보다 적어질수 없음
67. ● 최단경로를 실제 구해보자(어떻게 구할 것인가? 2/2)
○ 최단경로 배열에서 길이가 최소인 정점은 추후 갱신될 여지가 없음
■ 이를 “거치는 노드”로 정의
○ 현재까지 구한 최단경로의 길이와, 거치는 노드를 통한 최단경로를 비교해서 최소로 갱신
5. 자료구조 + 알고리즘 주요 개념 4가지
67
A D
B
C
20
15 900
50
노드 길이 직전
노드
A 0 A
B INF X
C INF X
D INF X
68. ● 최단경로를 실제 구해보자(실제 구하는 과정 1/3)
○ 현재 시작노드로 부터 최단 거리의 노드는 “A”이므로 이를 거치는 노드로 선정
○ 거치는 노드를 통해 {B,D} 최단경로 정보 갱신
5. 자료구조 + 알고리즘 주요 개념 4가지
68
A D
B
C
20
15 900
50
노드 길이 직전
노드
A 0 A
B INF X
C INF X
D INF X
① 현재까지 구한 최단거리중 “A”가 최소
② A가 “거치는 노드”가 됨
B 15 A
C 20 A
INF > (0 + 15)
INF > (0 + 20)
69. ● 최단경로를 실제 구해보자(실제 구하는 과정 2/3)
○ 현재 시작노드로 부터 최단 거리의 노드는 “B”이므로 이를 거치는 노드로 선정
○ 거치는 노드를 통해 {B,D} 최단경로 정보 갱신
5. 자료구조 + 알고리즘 주요 개념 4가지
69
A D
B
C
20
15 900
50
노드 길이 직전
노드
A 0 A
B 15 A
C 20 A
D INF X
① 현재까지 구한 최단거리중 “B”가 최소
② A가 “거치는 노드”가 됨
* “A”를 거치는건 이미 했으므로 제외
D 915 B
INF > (15 + 900)
70. ● 최단경로를 실제 구해보자(실제 구하는 과정 3/3)
○ 이전과 같이 반복하면 최종적으로 아래와 같은 테이블이 완성 됨
○ 시작 노드부터 모든 노드까지 최단 경로 및 길이가 구해짐
5. 자료구조 + 알고리즘 주요 개념 4가지
70
A D
B
C
20
15 900
50
노드 길이 직전
노드
A 0 A
B 15 A
C 20 A
D 70 C
D <- C <- A
C <- A
B <- A
A <- A
71. ● 다익스트라는 언제설명하죠? -> 지금 까지 한게 “다익스트라 알고리즘” 입니다. 특징을 정리해봅시다.
○ 시작노드에서 모든 노드까지 최단경로 및 길이를 구함
○ 매번 아직 선택하지 않은 노드에서 “거치는 노드”를 선택 후, 갱신할 최단경로가 있는지 확인하는 방
식(그리디적 선택)
○ “직전 노드” 과 “현재 노드가 동일할 때까지 계속 이어 가면 “최단 경로”를 알 수 있음
5. 자료구조 + 알고리즘 주요 개념 4가지
71
A D
B
C
20
15 900
50
노드 길이 직전
노드
A 0 A
B 15 A
C 20 A
D 70 C
D <- C <- A
C <- A
B <- A
A <- A
72. 5. 자료구조 + 알고리즘 주요 개념 4가지
72
다익스트라 알고리즘
다익스트라를 사용할때 주의할 점
73. ● 다익스트라의 한계
○ 음의 가중치가 있는 경우, 순간 선택이 최선이라고 보장 할수 없음
○ 음의 가중치가 있을 경우, “밸만 포드 알고리즘”으로 풀이
5. 자료구조 + 알고리즘 주요 개념 4가지
73
A
B C
8
-500
4
D
10
맨 처음 거치는 노드는 “C”이고 이때 경로길이는 4임
하지만 추후 “C”까지 가는 더 짧은 경로가 발생 함
74. ● 이제 정리가 되었으니, 조금 더 복잡한 그래프를 가지고 해볼까요?(1/7)
○ 시작노드의 최소비용은 0, 직전노드는 시작노드로 설정
5. 자료구조 + 알고리즘 주요 개념 4가지
74
75. ● 이제 정리가 되었으니, 조금 더 복잡한 그래프를 가지고 해볼까요?(2/7)
○ 거치는 노드 “A”를 통해 최단경로 갱신
5. 자료구조 + 알고리즘 주요 개념 4가지
75
76. ● 이제 정리가 되었으니, 조금 더 복잡한 그래프를 가지고 해볼까요?(3/7)
○ 거치는 노드 “E”를 통해 최단경로 갱신
5. 자료구조 + 알고리즘 주요 개념 4가지
76
77. ● 이제 정리가 되었으니, 조금 더 복잡한 그래프를 가지고 해볼까요?(4/7)
○ 거치는 노드 “C”를 통해 최단경로 갱신
5. 자료구조 + 알고리즘 주요 개념 4가지
77
78. ● 이제 정리가 되었으니, 조금 더 복잡한 그래프를 가지고 해볼까요?(5/7)
○ 거치는 노드 “B”를 통해 최단경로 갱신(갱신할 경로 없음)
5. 자료구조 + 알고리즘 주요 개념 4가지
78
79. ● 이제 정리가 되었으니, 조금 더 복잡한 그래프를 가지고 해볼까요?(6/7)
○ 거치는 노드 “D”를 통해 최단경로 갱신(갱신할 경로 없음)
5. 자료구조 + 알고리즘 주요 개념 4가지
79
80. ● 이제 정리가 되었으니, 조금 더 복잡한 그래프를 가지고 해볼까요?(7/7)
○ 시작노드 “A”에서 각 노드에 대한 최단경로 및 길이가 구해짐
5. 자료구조 + 알고리즘 주요 개념 4가지
80
81. 81
1. 이 책을 쓰게 된 이유
2. 이 책의 특징과 장점, 대상 독자
3. 코딩 테스트 마인드셋
4. 2023 코딩 테스트 트렌드, 2024는?
5. 자료구조 + 알고리즘 주요 개념 4가지
6. 코딩 테스트 주요 문제 풀이 5가지
82. 6. 코딩 테스트 주요 문제 풀이 2가지
82
실전문제 #1 - 짝지어 제거하기
문제 분석
84. 6. 코딩 테스트 주요 문제 풀이 2가지
84
① 알파벳 2개가 붙은 짝 찾음
② 둘을 제거
③ 나머지 문자열 붙임
시간복잡도가 O((len(s)^2)일 경우 시간초과
쓸데 없는 고민은 최대한 줄일수 있음(숫자,특수문
자,대문자 고려할 필요가 없음)
85. ● 문제 분석
○ 문제 요약
■ 소문자로 주어진 문자열의 인접한 문자를 삭제해가면서, 문자열이 전부 삭제가능한지 확인
○ 사용할 알고리즘
■ 문자 삭제 후, 가장 최근의 문자로 돌아가서 다시 탐색하므로 ‘스택”을 활용
○ 중요한 조건
■ 입력값이 최대 100만이므로 O(N^2)알고리즘 사용시 TLE 가능 O(NlogN) 내 알고리즘 고려
■ Only 소문자 이므로, 다른 문자가 들어오는건 고려하지 않음
6. 코딩 테스트 주요 문제 풀이 2가지
85
86. 6. 코딩 테스트 주요 문제 풀이 2가지
86
실전문제 #1 - 짝지어 제거하기
문제 풀이
87. 6. 코딩 테스트 주요 문제 풀이 2가지
87
● 문제 접근하기(일단 도식화 해봅니다)
b a a b a a
아래 1)과 2)를 붙인다
1) 없어지는 문자열 이전 문자 중, 가장 최근 문자 ‘b’
2) 없어지는 문자열 바로 다음 문자 ‘b’
b b a a 1) 없어지는 문자열 이전 문자가 없으므로, 없어지는 문자열 이후 문자 ‘a’ 부터 시작
a a
1) 없어지는 문자열 이전 문자가 없으므로, 없어지는 문자열 이후 문자 ‘b’ 부터 시작
88. 6. 코딩 테스트 주요 문제 풀이 2가지
88
● 문제 접근하기(어떻게 구현할지 고민 해봅시다)
○ 중간 문자열이 삭제된 후 처리를 어떻게 할 것인가?(1 / 3)
■ copy-move 방식은 사람에게 쉬우나, 컴퓨터가 수행시 연산횟수가 많아짐
뒤에 있는 문자열을 그대로 붙이면 .. copy-move가 됩니다. O(N^2), TLE 가능성 존재
b a a x
…..
a
0 1 2 3 N
89. 6. 코딩 테스트 주요 문제 풀이 2가지
89
● 문제 접근하기(어떻게 구현할지 고민 해봅시다)
○ 중간 문자열이 삭제된 후 처리를 어떻게 할 것인가?(2 / 3)
■ 삭제 시, 이전 문자만 알면 됨(전체 문자열을 매번 제어할 필요가 없음)
copy-move 하지 않고 중간 문제열 삭제 후 “b”와 비교할수 있으면 됨
-> 삭제되기 전 “가장 최근” 문자열을 알면 됨, LIFO 방식의 스택이 적절함
b a a x
…..
a
0 1 2 3 N
b
a
같지 않으면 push
b
a
a
같으면 pop
b
x
같지 않으면 push
스택을 활용하도록 개선(Copy move가 없음)
93. 6. 코딩 테스트 주요 문제 풀이 2가지
93
DFS가 아닌 BFS를 써야 한다
대각선으로는 움직일 수 없다
맵을 벗어날수 없으므로 불가능
도착할 수 없는 경우도 입력에 주어짐
이게 더 빨리
도착하는데?
이러는 순간
망합니다!
94. 6. 코딩 테스트 주요 문제 풀이 2가지
n*m하면 최대 칸이 10,000개 까지 될수 있음
성능을 크게 고민하지 않고 탐색 알고리즘으로 접근 가
능
사실 당연한 얘기 입니다. 단순히 미로 크기인데 다를 수 없다
는게 이상합니다.
너무 시간은 뺐기지 않되, 뭘 의미하나 한번 고민해보는 정도면
됩니다.
배열은 (0,0) 시작하므로 헷갈리지 않도록 중요 표시해두면 좋음
95. ● 문제 분석
○ 문제 요약
■ 시작점에서 종료지점까지 이동 할때, 최단거리
○ 사용할 알고리즘
■ 최단 거리를 구해야 하므로 “BFS” 알고리즘을 사용
○ 중요한 조건
■ 8방향이 아닌 4방향으로만 이동 가능
■ 맵 밖으로 벗어날 수 없음
■ 도착지점이 없는 미로가 있을수 있음(이 미로가 없다는 제약사항 없음)
6. 코딩 테스트 주요 문제 풀이 2가지
95
96. 6. 코딩 테스트 주요 문제 풀이 2가지
96
실전문제 #2 - 게임 맵 최단 거리
문제 풀이
97. ● 미로 찾는 과정을 도식화 해봅시다.
○ BFS와 유사함
6. 코딩 테스트 주요 문제 풀이 2가지
97
상하좌우 이동을 그
래프로 표현
맵 밖을 벗어나면 더이상 탐색하지 않음
맵 밖을 벗어나면 더이상 탐색하지 않음
하
상
상
좌
좌
우
우
하
굳이 돌아가는 걸 체크할 필요 없음(이미 방문여부 체크 필요) …
…
…
…
…
98. ● 도식화 한 과정을 표현하기 위해 필요한 것을 정리해 봅시다.(BFS를 하되, 최단거리를 저장하면서 함)
○ 이미 방문한 노드인지 확인할 수 있어야 함(distance)
○ 현재 위치를 몇번의 이동으로 확는지 확인할 수 있어야 함(distance)
○ 상하좌우 이동 가능해야 함
6. 코딩 테스트 주요 문제 풀이 2가지
0 X X X X
X X X X X
X X X X X
X X X X X
X X X X X
maps distance
현재 방문하지 않았으면 X
방문 했으면 시작점부터 현재 위치까지 거리
move
100. ● 문제를 풀때 시간관리는 어떻게 하나요?
● 코딩 테스트 언어 선택은 어떻게 해야 하나요?
● 문제를 풀 때 어떤알고리즘을 활용해야 하는지 빠르게 접근하는 방법을 알 수 있을까요?
● 알고리즘 처음 시작부터 지금까지 고난에서 대처한 마음가짐이 궁금합니다.
● 코딩테스트와 면접에 대한 공부 방식이 조금 달라야 할까요?
Q&A
100
101. ● 저자가 직접 답변하는 오픈채팅방
● 책과 같이 공부할 수 있는 코드자료
● 코딩 테스트 합격자 되기 - 파이썬 편 구매하기
● 저자가 직접 관리하는 커뮤니티 공간(네이버 카페)
저자와 소통하기
101
Editor's Notes
친절한 책을 쓰고 싶었습니다. 문제 자체에 대한 풀이도 중요하지만 수험서의 목적은 실제 시험에서 문제를 풀수 있게 하는 것입니다. 풀이 뿐 아니라 풀이 자체에만 집중하지 않고 문제분석 부터 알고리즘을 설계하는 방식까지 다루는 책을 만들고 싶었습니다.
대학 시절, 코딩을 잘하는 선배의 머릿속이 궁금했던적이 많습니다. 나랑 똑같은 문제를 봤을때 머릿속에 무엇을 떠올릴지 궁금했습니다. 이걸 알려주는 책을 만들고 싶었습니다.
당장 시험을 준비해야 하는 분들에게는 시험에 중요한 사항들을 빨리 익힐수 있게 하는게 최우선 목적이긴 하나, 코딩테스트 책이라 할지라도, 코테를 보고 다시 보지 않는 책이 아닌, 개발자의 평생 숙제인 알고리즘/자료구조가 필요할때마다 꺼내볼수 있는 책을 만들고 싶었습니다.
특정 알고리즘을 알아야 풀 수 있는 문제보다, 문제를 정확히 이해하고 요구사항을 빠짐없이 구현하는 문제가 많이 출제 됨
탐색
단순한 반복문을 통한 탐색(완전탐색,전체를 탐색하는 경우가 많음, 난이도 가장 낮음)
DFS/BFS를 통한 탐색(완전탐색,탐색의 목적을 고려해야 함)
백트래킹(탐색의 목적 및 효율까지 고려해야 함,유망함수를 구현해서 성능을 만족시켜야 함)
시뮬레이션(구현 문제)
특정한 알고리즘을 적용하지 않고 이해한 대로 구현하면 됨
좌표/행렬/문자열 관련 문제
자료구조 응용
스택/큐/딕셔너리/우선순위큐를 활용하는 문제
동일한 동작을 하지만, 성능이 다른 메서드 정리 필요(당락 결정)
기타 알고리즘(고득점을 위해 필요)
최단경로,Tree,그리디,동적계획법 등의 알고리즘
특정 알고리즘을 알아야 풀 수 있는 문제보다, 문제를 정확히 이해하고 요구사항을 빠짐없이 구현하는 문제가 많이 출제 됨
탐색
단순한 반복문을 통한 탐색(완전탐색,전체를 탐색하는 경우가 많음, 난이도 가장 낮음)
DFS/BFS를 통한 탐색(완전탐색,탐색의 목적을 고려해야 함)
백트래킹(탐색의 목적 및 효율까지 고려해야 함,유망함수를 구현해서 성능을 만족시켜야 함)
시뮬레이션(구현 문제)
특정한 알고리즘을 적용하지 않고 이해한 대로 구현하면 됨
좌표/행렬/문자열 관련 문제
자료구조 응용
스택/큐/딕셔너리/우선순위큐를 활용하는 문제
동일한 동작을 하지만, 성능이 다른 메서드 정리 필요(당락 결정)
기타 알고리즘(고득점을 위해 필요)
최단경로,Tree,그리디,동적계획법 등의 알고리즘
특정 알고리즘을 알아야 풀 수 있는 문제보다, 문제를 정확히 이해하고 요구사항을 빠짐없이 구현하는 문제가 많이 출제 됨
탐색
단순한 반복문을 통한 탐색(완전탐색,전체를 탐색하는 경우가 많음, 난이도 가장 낮음)
DFS/BFS를 통한 탐색(완전탐색,탐색의 목적을 고려해야 함)
백트래킹(탐색의 목적 및 효율까지 고려해야 함,유망함수를 구현해서 성능을 만족시켜야 함)
시뮬레이션(구현 문제)
특정한 알고리즘을 적용하지 않고 이해한 대로 구현하면 됨
좌표/행렬/문자열 관련 문제
자료구조 응용
스택/큐/딕셔너리/우선순위큐를 활용하는 문제
동일한 동작을 하지만, 성능이 다른 메서드 정리 필요(당락 결정)
기타 알고리즘(고득점을 위해 필요)
최단경로,Tree,그리디,동적계획법 등의 알고리즘
특정 알고리즘을 알아야 풀 수 있는 문제보다, 문제를 정확히 이해하고 요구사항을 빠짐없이 구현하는 문제가 많이 출제 됨
탐색
단순한 반복문을 통한 탐색(완전탐색,전체를 탐색하는 경우가 많음, 난이도 가장 낮음)
DFS/BFS를 통한 탐색(완전탐색,탐색의 목적을 고려해야 함)
백트래킹(탐색의 목적 및 효율까지 고려해야 함,유망함수를 구현해서 성능을 만족시켜야 함)
시뮬레이션(구현 문제)
특정한 알고리즘을 적용하지 않고 이해한 대로 구현하면 됨
좌표/행렬/문자열 관련 문제
자료구조 응용
스택/큐/딕셔너리/우선순위큐를 활용하는 문제
동일한 동작을 하지만, 성능이 다른 메서드 정리 필요(당락 결정)
기타 알고리즘(고득점을 위해 필요)
최단경로,Tree,그리디,동적계획법 등의 알고리즘
특정 알고리즘을 알아야 풀 수 있는 문제보다, 문제를 정확히 이해하고 요구사항을 빠짐없이 구현하는 문제가 많이 출제 됨
탐색
단순한 반복문을 통한 탐색(완전탐색,전체를 탐색하는 경우가 많음, 난이도 가장 낮음)
DFS/BFS를 통한 탐색(완전탐색,탐색의 목적을 고려해야 함)
백트래킹(탐색의 목적 및 효율까지 고려해야 함,유망함수를 구현해서 성능을 만족시켜야 함)
시뮬레이션(구현 문제)
특정한 알고리즘을 적용하지 않고 이해한 대로 구현하면 됨
좌표/행렬/문자열 관련 문제
자료구조 응용
스택/큐/딕셔너리/우선순위큐를 활용하는 문제
동일한 동작을 하지만, 성능이 다른 메서드 정리 필요(당락 결정)
기타 알고리즘(고득점을 위해 필요)
최단경로,Tree,그리디,동적계획법 등의 알고리즘