SlideShare a Scribd company logo
1 of 19
알고리즘이 뭔가요?
무함마드 이븐 무사 알콰리즈미(780~850)
알콰리즈미 → 알고리즘
에츠허르 다익스트라 → 다익스트라
로버트 플로이드 -> 플로이드-워셜
Knuth – Morris – Pratt → KMP
인물의 이름에서 유래
작동 방식에서 유래
홍수가 차듯 탐색 → flood fill
당장의 최선을 선택 → greedy
일을 최대한 미루기 → lazy segment tree
토끼와 거북이 알고리즘
Floyd’s cycle detection의 다른 이름
유향 그래프에서 사이클과 사이클의 시작점을 판별
Tortoise And Hare
토끼와 거북이 알고리즘
0. 토끼와 거북이를 포인터로 간주
두 포인터를 같은 지점으로 초기화
1. 토끼는 2칸, 거북이는 1칸씩 전진
2. 토끼와 거북이가 만났다면, 사이클이 존재
1. 토끼는 그대로, 거북이를 시작점으로 옮김
2. 토끼와 거북이 모두 1칸씩 전진
3. 처음으로 만난곳이 사이클의 시작점
3. 포인터가 null(종점)에 다다르면 사이클이 없음
시간복잡도 : O(N) / 공간복잡도 : O(1)
Tortoise And Hare
폴라드로 알고리즘
John Pollard가 고안, ρ(rho)를 닮아 붙여진 이름
• 정수를 O(N^1/4)의 시간복잡도로 소인수분해하는데 사용
• 최악의 경우 O(N), 다만 사실상 O(N^1/4)
• 인수분해 알고리즘이지만, 재귀적으로 소인수분해 가능
Pollard’s Rho
다이나믹 프로그래밍
문제를 쪼개고, 답을 재활용하는 방식
알고리즘으로도 부르지만, 문제의 전형적 접근법(패러다임)에 가까움
다이나믹이라는 용어는 멋있어서 붙여진 이름
Dynamic Programming
2*1 타일링 문제
https://www.acmicpc.net/problem/11726
알고리즘의 평가
탐색 : O(N)
정렬 : O(N^2)
TSP(외판원 순회) : O(2^N)
Naive solution
이분탐색 : O(logN)
정렬 : O(NlogN)~O(N)
TSP : X
Smart solution
탐색을 위해 O(N)이상의 복잡도를 갖는 프로그램은 비효율적일까?
탐색은 naive한 방법이 O(N), smart한 방법이 O(logN)이지만…
알고리즘의 평가기준이 상대적이듯, 좋은 solution의 기준도 상대적이다
문제 : X번째로 큰 수(쿼리)
첫째 줄에 수의 개수 N이 주어진다. ( 1<=N<=100,000 )
둘째 줄부터 N개의 수가 주어진다.
셋째 줄에는 쿼리의 개수 M이 주어진다.( 1<=M<=100,000)
넷째 줄부터 M개의 X가 주어진다.
출력
입력
각 쿼리에 대해서 X번째로 큰 수를
공백으로 구분하여 출력한다.
예제 출력
5
2 5 1 9 7
3
2 1 5
예제 입력
7 9 1
문제 : X번째로 큰 수(쿼리)
• 다양한 풀이법이 존재할 수 있는 문제
• 제안하는 방법은 정렬을 이용한 풀이방법
• 내림차순 정렬한다면, 정렬된 배열에서 단순히 x번째 수를 참조,
쿼리당 O(1)만에 정답을 구할 수 있음
• 정렬을 하는데 O(NlogN), M개의 쿼리당 O(1)이 소모되므로
O(NlogN + M)의 시간 복잡도를 갖음
문제 : X번째로 큰 수(쿼리)
• 앞서 제안한 O(NlogN + M)의 풀이방법은 탐색을 위해서 정렬을 진행하지만, 효율적인 방법
• 탐색보다 정렬이 더 높은 비용이지만 // O(logN)~O(N) < O(N)~O(N^2)
문제가 변형됨에 따라 탐색문제의 smart한 풀이가 정렬이 될 수도 있음
• 문제마다 요구하는 알고리즘이 특정되어지지 않을 정도로 다양함
• 문제의 단순한 조건(ex. 수의 범위)만 바꿔도 쉬운 문제가 매우 어려운 문제로 바뀔 수 있음
• 회의실 배정 == greedy, 배낭문제 == dynamic programming같은 고정관념이 아닌
효율적인 알고리즘들을 배우며 사고를 단계적으로 확장시키는것이 중요
결론
시사점
Problem Solving을 위한 온라인 저지
BaekJoon Online Judge Programmers
장점 문제가 아주(약 22000문제)많음
난이도가 세분화(30단계)되어있음
‘https://solved.ac/’와 연동하여 다양한정보 제공
입출력을 제외한 solution함수를 작성하는 스타일
대부분의 코딩테스트 환경과 동일
단점 대부분의 코딩테스트 환경과 다름(입출력존재)
문제가 너무 많아서, 뭘 풀지 모르겠다…
문제수가 적음
난이도가 5단계로만 분류
https://www.acmicpc.net/ https://programmers.co.kr/learn/challenges
 백준으로 시작하여, 코딩테스트를 응시할 때 프로그래머스로 옮기는 것을 추천
Solved.ac
• 기존 백준의 단점을 상당수 보완
• 다양한 태그와 그래프, 티어를 제공 → 동기부여+약점파악
• 알고리즘 난이도를 기준으로 학습 가이드라인(CLASS) 제공
• 깃허브와 유사한 잔디제공(!!!)
어떤 프로그래밍언어를 사용해야하나요?
 목적이 코딩테스트라면 파이썬이나 자바도 OK
 이미 숙련된 언어가 존재한다면, 해당 언어로 먼저 시작(언어를 바꾸는건 어렵지 않다)
 목적이 코딩테스트가 아닌, 취미용 PS나 대회(Competitive Programming, CP)가 목적이라면 C++이 보통
 유리한 언어를 선택하는 것 보다 더 중요한건 언어에 대한 이해도
파이썬으로 대회해도, 자바로 코딩테스트 응시해도 not bad
PS, CP, 코딩테스트가 다른가요?
PS : 백준등의 Online Judge에서 시간제한 없이 문제를 푸는것
CP : 시간제한이 존재하는 PS
코딩테스트 : 채용목적의 CP(?), PS나 CP 에 비해 알고리즘에 대해 깊게 묻지 않음
대체로 코딩테스트는…
• 많은 요구사항으로 구현이 어려움
• 구현을 어렵게 할 목적으로 문자열의 출제율도 높음
• 언어마다 내장된 함수나 자료구조를 충분히 활용할 수 있어야 해결이 가능
• 구현, 브루트포스, 그리디, DP, BFS, DFS정도로도 합격을 바라볼 수 있음
대체로 프로그래밍 대회는…
• 이 세상에 존재하는 모든 문제를 출제
• 대회마다 문제의 성격도 다름
문제풀이에 필요한 두 가지 요소
1. 구현능력 : 내가 떠올린 로직을 프로그래밍 언어로 구현하는 능력
→ 많이 풀면, 많이 늚 (질보단 양)
2. 문제해결능력 : 문제를 보고 로직을 구상하는 능력
→ 좋은 문제를 풀어야 늚 (양보단 질)
문제풀이 연습 가이드라인
1. 한문제에 1시간을 넘기지 않기
넘겼다면, 다른사람의 풀이를 참고하기
2. 충분히 고민하고 코드작성을 시작하기
3. 많이 읽기 → 새로운 시각을 발견하면, 실력 수직상승
4. 내가 갖고 있는 지식을 나누기
5. 나만의 가이드라인 확립하기
6. 문제풀이를 즐기기
참고한 자료&&공부자료
• geeksforgeeks : 자료 많음, 로그인하면 무료
• ko/en Wikipedia : ko Wikipedia, en Wikipedia : 수학적인 접근, 원론적인 정의
• Introduction to Algorithms : 알고리즘 교과서, 난이도 고급
• 종만북 : (대회용)교과서, 난이도 중급
• 개인 블로그, codeforce blog, 그 외 구글링해서 나온 자료
질문 : bjh245020@yonsei.ac.kr

More Related Content

What's hot

Effective Python, Clean Code
Effective Python, Clean CodeEffective Python, Clean Code
Effective Python, Clean CodeJinHwan2
 
변수 이름의 효과
변수 이름의 효과변수 이름의 효과
변수 이름의 효과민욱 이
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이NAVER D2
 
파이선 문법 조금만더
파이선 문법 조금만더파이선 문법 조금만더
파이선 문법 조금만더Woojing Seok
 
문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의Kwangyoun Jung
 
Efficient Training of Bert by Progressively Stacking
Efficient Training of Bert by Progressively StackingEfficient Training of Bert by Progressively Stacking
Efficient Training of Bert by Progressively StackingHoon Heo
 
Sequence to Sequence Learning with Neural Networks
Sequence to Sequence Learning with Neural NetworksSequence to Sequence Learning with Neural Networks
Sequence to Sequence Learning with Neural NetworksHoon Heo
 
Masked Sequence to Sequence Pre-training for Language Generation
Masked Sequence to Sequence Pre-training for Language GenerationMasked Sequence to Sequence Pre-training for Language Generation
Masked Sequence to Sequence Pre-training for Language GenerationHoon Heo
 
C 언어 스터디 03 - 배열, 포인터
C 언어 스터디 03 - 배열, 포인터C 언어 스터디 03 - 배열, 포인터
C 언어 스터디 03 - 배열, 포인터Yu Yongwoo
 
파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터Eunjeong (Lucy) Park
 

What's hot (20)

메이크챗봇 자연어기초
메이크챗봇 자연어기초메이크챗봇 자연어기초
메이크챗봇 자연어기초
 
Python - Module
Python - ModulePython - Module
Python - Module
 
Effective Python, Clean Code
Effective Python, Clean CodeEffective Python, Clean Code
Effective Python, Clean Code
 
BOJ10547
BOJ10547BOJ10547
BOJ10547
 
변수 이름의 효과
변수 이름의 효과변수 이름의 효과
변수 이름의 효과
 
REALM
REALMREALM
REALM
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
 
파이선 문법 조금만더
파이선 문법 조금만더파이선 문법 조금만더
파이선 문법 조금만더
 
TinyBERT
TinyBERTTinyBERT
TinyBERT
 
문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의
 
Efficient Training of Bert by Progressively Stacking
Efficient Training of Bert by Progressively StackingEfficient Training of Bert by Progressively Stacking
Efficient Training of Bert by Progressively Stacking
 
Python basic
Python basicPython basic
Python basic
 
Albert
AlbertAlbert
Albert
 
DS_04
DS_04DS_04
DS_04
 
Sequence to Sequence Learning with Neural Networks
Sequence to Sequence Learning with Neural NetworksSequence to Sequence Learning with Neural Networks
Sequence to Sequence Learning with Neural Networks
 
10 2 튜플
10 2 튜플10 2 튜플
10 2 튜플
 
자연어4 | 1차강의
자연어4 | 1차강의자연어4 | 1차강의
자연어4 | 1차강의
 
Masked Sequence to Sequence Pre-training for Language Generation
Masked Sequence to Sequence Pre-training for Language GenerationMasked Sequence to Sequence Pre-training for Language Generation
Masked Sequence to Sequence Pre-training for Language Generation
 
C 언어 스터디 03 - 배열, 포인터
C 언어 스터디 03 - 배열, 포인터C 언어 스터디 03 - 배열, 포인터
C 언어 스터디 03 - 배열, 포인터
 
파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터
 

Similar to [Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘

DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfHo Jeong Im
 
알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1Byeongsu Kang
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexityskku_npc
 
자료구조1보고서
자료구조1보고서자료구조1보고서
자료구조1보고서KimChangHoen
 
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)ultrasuperrok
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Jaejin Yun
 
유한상태변환기를 이용한 한국어_형태소_분석_이상호
유한상태변환기를 이용한 한국어_형태소_분석_이상호유한상태변환기를 이용한 한국어_형태소_분석_이상호
유한상태변환기를 이용한 한국어_형태소_분석_이상호상호 이
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서KimChangHoen
 
1 1 complexity_theory_and_np_proof_system_0710
1 1 complexity_theory_and_np_proof_system_07101 1 complexity_theory_and_np_proof_system_0710
1 1 complexity_theory_and_np_proof_system_0710Jiyun Kim
 
2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions현정 김
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2KoChungWook
 
머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)홍배 김
 
세미나
세미나세미나
세미나Dongyi Kim
 
03. segment tree
03. segment tree03. segment tree
03. segment tree승혁 조
 
딥러닝 기반 자연어 언어모델 BERT
딥러닝 기반 자연어 언어모델 BERT딥러닝 기반 자연어 언어모델 BERT
딥러닝 기반 자연어 언어모델 BERTSeonghyun Kim
 
알고리즘 스터디 NP-완비
알고리즘 스터디 NP-완비알고리즘 스터디 NP-완비
알고리즘 스터디 NP-완비SeungMin Yang
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제NAVER D2
 
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptxultrasuperrok
 

Similar to [Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘 (20)

DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdf
 
알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 
자료구조1보고서
자료구조1보고서자료구조1보고서
자료구조1보고서
 
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버
 
유한상태변환기를 이용한 한국어_형태소_분석_이상호
유한상태변환기를 이용한 한국어_형태소_분석_이상호유한상태변환기를 이용한 한국어_형태소_분석_이상호
유한상태변환기를 이용한 한국어_형태소_분석_이상호
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서
 
1 1 complexity_theory_and_np_proof_system_0710
1 1 complexity_theory_and_np_proof_system_07101 1 complexity_theory_and_np_proof_system_0710
1 1 complexity_theory_and_np_proof_system_0710
 
2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
 
머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)
 
분할정복
분할정복분할정복
분할정복
 
세미나
세미나세미나
세미나
 
03. segment tree
03. segment tree03. segment tree
03. segment tree
 
딥러닝 기반 자연어 언어모델 BERT
딥러닝 기반 자연어 언어모델 BERT딥러닝 기반 자연어 언어모델 BERT
딥러닝 기반 자연어 언어모델 BERT
 
알고리즘 스터디 NP-완비
알고리즘 스터디 NP-완비알고리즘 스터디 NP-완비
알고리즘 스터디 NP-완비
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
 
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
 

[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘

  • 1.
  • 2. 알고리즘이 뭔가요? 무함마드 이븐 무사 알콰리즈미(780~850) 알콰리즈미 → 알고리즘 에츠허르 다익스트라 → 다익스트라 로버트 플로이드 -> 플로이드-워셜 Knuth – Morris – Pratt → KMP 인물의 이름에서 유래 작동 방식에서 유래 홍수가 차듯 탐색 → flood fill 당장의 최선을 선택 → greedy 일을 최대한 미루기 → lazy segment tree
  • 3. 토끼와 거북이 알고리즘 Floyd’s cycle detection의 다른 이름 유향 그래프에서 사이클과 사이클의 시작점을 판별 Tortoise And Hare
  • 4. 토끼와 거북이 알고리즘 0. 토끼와 거북이를 포인터로 간주 두 포인터를 같은 지점으로 초기화 1. 토끼는 2칸, 거북이는 1칸씩 전진 2. 토끼와 거북이가 만났다면, 사이클이 존재 1. 토끼는 그대로, 거북이를 시작점으로 옮김 2. 토끼와 거북이 모두 1칸씩 전진 3. 처음으로 만난곳이 사이클의 시작점 3. 포인터가 null(종점)에 다다르면 사이클이 없음 시간복잡도 : O(N) / 공간복잡도 : O(1) Tortoise And Hare
  • 5. 폴라드로 알고리즘 John Pollard가 고안, ρ(rho)를 닮아 붙여진 이름 • 정수를 O(N^1/4)의 시간복잡도로 소인수분해하는데 사용 • 최악의 경우 O(N), 다만 사실상 O(N^1/4) • 인수분해 알고리즘이지만, 재귀적으로 소인수분해 가능 Pollard’s Rho
  • 6. 다이나믹 프로그래밍 문제를 쪼개고, 답을 재활용하는 방식 알고리즘으로도 부르지만, 문제의 전형적 접근법(패러다임)에 가까움 다이나믹이라는 용어는 멋있어서 붙여진 이름 Dynamic Programming 2*1 타일링 문제 https://www.acmicpc.net/problem/11726
  • 7. 알고리즘의 평가 탐색 : O(N) 정렬 : O(N^2) TSP(외판원 순회) : O(2^N) Naive solution 이분탐색 : O(logN) 정렬 : O(NlogN)~O(N) TSP : X Smart solution
  • 8. 탐색을 위해 O(N)이상의 복잡도를 갖는 프로그램은 비효율적일까? 탐색은 naive한 방법이 O(N), smart한 방법이 O(logN)이지만… 알고리즘의 평가기준이 상대적이듯, 좋은 solution의 기준도 상대적이다
  • 9. 문제 : X번째로 큰 수(쿼리) 첫째 줄에 수의 개수 N이 주어진다. ( 1<=N<=100,000 ) 둘째 줄부터 N개의 수가 주어진다. 셋째 줄에는 쿼리의 개수 M이 주어진다.( 1<=M<=100,000) 넷째 줄부터 M개의 X가 주어진다. 출력 입력 각 쿼리에 대해서 X번째로 큰 수를 공백으로 구분하여 출력한다. 예제 출력 5 2 5 1 9 7 3 2 1 5 예제 입력 7 9 1
  • 10. 문제 : X번째로 큰 수(쿼리) • 다양한 풀이법이 존재할 수 있는 문제 • 제안하는 방법은 정렬을 이용한 풀이방법 • 내림차순 정렬한다면, 정렬된 배열에서 단순히 x번째 수를 참조, 쿼리당 O(1)만에 정답을 구할 수 있음 • 정렬을 하는데 O(NlogN), M개의 쿼리당 O(1)이 소모되므로 O(NlogN + M)의 시간 복잡도를 갖음
  • 11. 문제 : X번째로 큰 수(쿼리) • 앞서 제안한 O(NlogN + M)의 풀이방법은 탐색을 위해서 정렬을 진행하지만, 효율적인 방법 • 탐색보다 정렬이 더 높은 비용이지만 // O(logN)~O(N) < O(N)~O(N^2) 문제가 변형됨에 따라 탐색문제의 smart한 풀이가 정렬이 될 수도 있음 • 문제마다 요구하는 알고리즘이 특정되어지지 않을 정도로 다양함 • 문제의 단순한 조건(ex. 수의 범위)만 바꿔도 쉬운 문제가 매우 어려운 문제로 바뀔 수 있음 • 회의실 배정 == greedy, 배낭문제 == dynamic programming같은 고정관념이 아닌 효율적인 알고리즘들을 배우며 사고를 단계적으로 확장시키는것이 중요 결론 시사점
  • 12. Problem Solving을 위한 온라인 저지 BaekJoon Online Judge Programmers 장점 문제가 아주(약 22000문제)많음 난이도가 세분화(30단계)되어있음 ‘https://solved.ac/’와 연동하여 다양한정보 제공 입출력을 제외한 solution함수를 작성하는 스타일 대부분의 코딩테스트 환경과 동일 단점 대부분의 코딩테스트 환경과 다름(입출력존재) 문제가 너무 많아서, 뭘 풀지 모르겠다… 문제수가 적음 난이도가 5단계로만 분류 https://www.acmicpc.net/ https://programmers.co.kr/learn/challenges  백준으로 시작하여, 코딩테스트를 응시할 때 프로그래머스로 옮기는 것을 추천
  • 13. Solved.ac • 기존 백준의 단점을 상당수 보완 • 다양한 태그와 그래프, 티어를 제공 → 동기부여+약점파악 • 알고리즘 난이도를 기준으로 학습 가이드라인(CLASS) 제공 • 깃허브와 유사한 잔디제공(!!!)
  • 14. 어떤 프로그래밍언어를 사용해야하나요?  목적이 코딩테스트라면 파이썬이나 자바도 OK  이미 숙련된 언어가 존재한다면, 해당 언어로 먼저 시작(언어를 바꾸는건 어렵지 않다)  목적이 코딩테스트가 아닌, 취미용 PS나 대회(Competitive Programming, CP)가 목적이라면 C++이 보통  유리한 언어를 선택하는 것 보다 더 중요한건 언어에 대한 이해도 파이썬으로 대회해도, 자바로 코딩테스트 응시해도 not bad
  • 15. PS, CP, 코딩테스트가 다른가요? PS : 백준등의 Online Judge에서 시간제한 없이 문제를 푸는것 CP : 시간제한이 존재하는 PS 코딩테스트 : 채용목적의 CP(?), PS나 CP 에 비해 알고리즘에 대해 깊게 묻지 않음 대체로 코딩테스트는… • 많은 요구사항으로 구현이 어려움 • 구현을 어렵게 할 목적으로 문자열의 출제율도 높음 • 언어마다 내장된 함수나 자료구조를 충분히 활용할 수 있어야 해결이 가능 • 구현, 브루트포스, 그리디, DP, BFS, DFS정도로도 합격을 바라볼 수 있음 대체로 프로그래밍 대회는… • 이 세상에 존재하는 모든 문제를 출제 • 대회마다 문제의 성격도 다름
  • 16. 문제풀이에 필요한 두 가지 요소 1. 구현능력 : 내가 떠올린 로직을 프로그래밍 언어로 구현하는 능력 → 많이 풀면, 많이 늚 (질보단 양) 2. 문제해결능력 : 문제를 보고 로직을 구상하는 능력 → 좋은 문제를 풀어야 늚 (양보단 질)
  • 17. 문제풀이 연습 가이드라인 1. 한문제에 1시간을 넘기지 않기 넘겼다면, 다른사람의 풀이를 참고하기 2. 충분히 고민하고 코드작성을 시작하기 3. 많이 읽기 → 새로운 시각을 발견하면, 실력 수직상승 4. 내가 갖고 있는 지식을 나누기 5. 나만의 가이드라인 확립하기 6. 문제풀이를 즐기기
  • 18. 참고한 자료&&공부자료 • geeksforgeeks : 자료 많음, 로그인하면 무료 • ko/en Wikipedia : ko Wikipedia, en Wikipedia : 수학적인 접근, 원론적인 정의 • Introduction to Algorithms : 알고리즘 교과서, 난이도 고급 • 종만북 : (대회용)교과서, 난이도 중급 • 개인 블로그, codeforce blog, 그 외 구글링해서 나온 자료