SlideShare a Scribd company logo
코딩테스트 합격자 되기 C++
00~ 01장 효율적으로 공부하기
저자 박경록
목차
코딩 테스트를 효율적으로 준비하는 방법
- 타인의 풀이를 보는 공부 법
- 아는 것만 공부하지 말자
- 테스트 케이스를 고려하는 법
- 의사코드 설계하는 법
강의 영상
타인의 풀이를 보는 공부 법(고민)
- 시간이 많다면 충분히 문제에 대해 혼자 고민해보는 것이 좋음
But…. “대부분 수험생들은 시간이 부족함”
타인의 풀이를 보는 공부 법(방법)
1. 최소한 30분 ~ 1시간 정도 고민한다.
2. 그래도 답이 나오지 않을 경우, 답안코드를 본다.
=> 답안 코드에서 본인이 해결하지 못한 부분을 해결한 코드를 정리
=> 답안 코드에서 사용한 알고리즘과 매칭되는 부분을 문제에서 분석
=> 2주 정도 후에 다시 구현
타인의 풀이를 보는 공부 법(예시 - 문제)
입력:
nums = [2, 7, 11, 15],
target = 9
출력: [0, 1]
설명: nums[0] + nums[1] = 2 + 7 = 9 이므로 정답은 [0, 1]입니다
제한 :
입력 크기는 최대 100만 이고 제한시간은 1초 입니다.
타인의 풀이를 보는 공부 법(예시 - 내 코드 vs 정답 코드)
해결하지 못한 코드
정답 코드
①
②
타인의 풀이를 보는 공부 법(정리)
문제 입력값이 100만 인데, O(N^2) 알고리즘으로 접근해서 TLE 발생
- 정답 코드는 unordered_map을 활용해서 O(N)으로 개선함
=> 각 숫자를 unordered_map의 키로 활용
깨달은 점
- 다음 부터는 입력값을 꼭 확인해서 문제에서 요구하는 시간복잡도를 충족 시키자!
- 자료구조에 의해서도 시간 복잡도가 영향을 받을 수 있음(자료구조에 맞게 구현하므로)
아는것만 공부하지 말자(방법)
- 아는 것만 공부하면 얻는 것은 자신감 뿐… 7:3을 지키자.
- 단순 기록 대신 나만의 용어로 정리
아는것만 공부하지 말자(7:3)
- 기존 지식을 활용한 문제 풀이
- 기존에 틀렸던 부분 복습
- 새로운 개념 학습 및 문제 풀이
- 기존에 많이 틀렸던 알고리즘 문제 풀이
- 해결하지 못한 부분은 명확히 정리
알고있는 부분(30%) 모르는 부분(70%)
단순기록 대신 나만의 용어로 정리하자(방법)
- 나열식 정리는 타자연습과 다를바가 없습니다.(머리에 남지 않음)
- 개념을 머릿속에서 끝까지 이해한 후에, 완성된 문장으로 정리 합니다.
=> ??? ….. 이런걸 포함한다면 정리하는 의미가 없습니다.
단순기록 대신 나만의 용어로 정리하자(예시)
정렬
사용자가 정의한 기준대로, 데이
터를 나열하는 것
=> 이진탐색 사용 가능
시간 복잡도
비교정렬 : O(NlogN)
비-비교 정렬 : O(N)까지 가능
예시 코드
//something
나만의 언어로 변환
테스트 케이스 설계 하는 법(방법)
- 기본 케이스
- 경계값
- 에지 케이스
테스트 케이스 설계 하는 법(기본 케이스)
- 문제에서 설명한 “기본 동작”이 제대로 동작하는지 확인하는 케이스
문제: 두 정수를 입력받아 합을 반환하라.
입력: a=2,b=3
기대 출력:
5
테스트 케이스: assert sum(2, 3) == 5
문제: 주어진 문자열을 뒤집어 반환하라.
입력: "hello"
기대 출력: "olleh"
테스트 케이스: assert reverse("hello")
== "olleh"
테스트 케이스 설계 하는 법(경계 값)
- 입력값의 양 끝값을 테스트 함
문제: 주어진 양의 정수의 제곱근을 반환하라.
정수 부분만 반환한다.
입력 범위: 1에서 10^6 까지
최소값 입력: 1
테스트: assert sqrt(1) == 1
최대값 입력: 10^7
테스트: assert sqrt(10^6) == 1000
문제: 정수 배열과 타겟 정수가 주어졌을 때, 타겟의 인덱스를 반환
하라. 없으면 -1을 반환.
입력: 배열 [2,3,5,7,11], 타겟 3
경계값 테스트 케이스:
배열의 첫 요소: 2
테스트: assert find_index([2, 3, 5, 7, 11], 2) == 0
배열의 마지막 요소: 11
테스트: assert find_index([2, 3, 5, 7, 11], 11) == 4
테스트 케이스 설계 하는 법(에지 케이스)
- 예상치 못한 입력값이나 특수한 조건
문제: 주어진 정수가 소수인지 아닌지를 판별하라.
에지 케이스:
음수 입력:
테스트: assert is_prime(-1) == False
입력: 0
0은 소수가 아닙니다.
테스트: assert is_prime(0) == False
입력: 1
1은 소수가 아닙니다.
테스트: assert is_prime(1) == False
문제: 주어진 정수가 소수인지 아닌지를 판별하라.
에지 케이스:
음수 입력: 소수의 정의는 양의 정수에만 적용됩니다.
테스트: assert is_prime(-1) == False
입력: 0
0은 소수가 아닙니다.
테스트: assert is_prime(0) == False
입력: 1
1은 소수가 아닙니다.
테스트: assert is_prime(1) == False
의사코드 작성하기
의사코드 -> 구현 전, 비 프로그래밍 언어로 동작을 나열하는 것
장점
- 구현 전 예외사항을 충분히 고려할 수 있음
- 구현보다 시간이 적게 걸림
- 문제점 발견시 수정이 쉬움
의사코드 설계하기(문제분석 후 바로 구현시 문제점)
문제 분석 구현
- 바로 구현하기가 쉽지 않음
- 구현 후, 문제 수정은 시간이 오래걸림
- 문제가 있어도 확인이 쉽지 않음
- 흐름이 한 눈에 보이지 않음
바로 구현시
아쉬운 점
의사코드 설계하기(의사코드 작성시 장점)
문제 분석 구현
- 코드를 바로 구현하지 않고 자유롭게 설계 후 구현
- 의사코드 작성시 확인되는 문제는 수정이 쉬움
- 의사코드는 흐름을 한 눈에 확인 가능
- 전체적인 구조를 잡고 구현하면 코드 품질이 좋아짐
보완 된점
의사코드 작성
의사코드 설계하기(의사코드 작성법)
- 일반인도 이해할 정도의 논리 흐름으로 작성(세부사항까지 필요 없음)
- 추후 의사코드 대로 구현하는 경우가 많음
- 프로그래밍적 문법 사용 지양(고민이 많아짐)
의사코드 설계하기(잘못된 예시 vs 잘된 예시)
변수 A를 DataBase에 저장
포인터 변수 P에 컨테이너의 주소값 저장
1. 사용자의 정보를 저장한다:
- 사용자의 이름과 나이를 수집한다.
- 수집한 정보를 기록한다.
2. 제품 목록을 업데이트한다:
- 새로운 제품 정보를 확인한다.
- 제품 목록에 새 제품을 추가한다.
BAD Good
의사코드 설계하기(예시-알고리즘 문제 1)
알고리즘 문제:
"정수 배열이 주어지면, 모든 원소의 합을 구하고, 이를 출력하는 프로그램을 작성하시오."
1. 숫자로 이루어진 리스트를 준비한다.
2. 모든 숫자의 합을 계산한다:
- 합을 저장할 곳을 마련한다.
- 리스트의 각 숫자를 차례대로 합에 더한다.
3. 계산된 합을 출력한다.
의사코드 설계하기(예시-알고리즘 문제 2)
알고리즘 문제:
"사용자가 입력한 두 수를 비교하여 더 큰 수를 출력하는 프로그램을 작성하시오."
1. 사용자로부터 두 개의 숫자를 입력 받는다.
2. 두 숫자를 비교한다:
- 만약 첫 번째 숫자가 두 번째 숫자보다 크면, 첫 번째 숫자를 선택한다.
- 그렇지 않으면, 두 번째 숫자를 선택한다.
3. 선택된 숫자를 출력한다.
의사코드 설계하기(예시-알고리즘 문제 3)
알고리즘 문제:
"리스트에 있는 숫자들 중 가장 자주 등장하는 숫자를 찾아 출력하고, 그 숫자가 몇 번 등장했는지도 출력하는 프로그
램을 작성하시오."
1. 숫자로 이루어진 리스트를 준비한다.
2. 각 숫자가 몇 번 등장하는지 세어서 기록한다:
- 숫자별로 등장 횟수를 저장할 공간을 만든다.
- 리스트의 각 숫자에 대해, 해당 숫자의 등장 횟수를 1 증가시킨다.
3. 가장 많이 등장한 숫자를 찾는다:
- 가장 많이 등장한 숫자를 기록한다.
- 모든 숫자의 등장 횟수를 확인하면서, 가장 높은 등장 횟수를 갖는 숫자를 찾는다.
4. 가장 많이 등장한 숫자와 그 등장 횟수를 출력한다.
커뮤니티 소개
- 오픈 카톡방
- 깃허브
- 디스코드
커뮤니티 소개(오픈카톡방) cont’d
- 저자 직접 운영
- 대략 400명 정도 인원이 자유롭게 소통
- 개인적인 주제 및 코딩 관련 소통 가능
커뮤니티 소개(오픈카톡방)
커뮤니티 소개(깃허브) cont’d
- 책 문제의 정답코드
- 코딩테스트 준비를 위해 필요한 자료구조 및 알고리즘
- C++ 기본 문법
- STL의 성능 비교
커뮤니티 소개(깃허브)
커뮤니티 소개(디스코드) cont’d
- 모각코 진행
- 공식 스터디 / 개인 스터디 모집 공고 및 진행
- 책 관련 문의 / 답변
커뮤니티 소개(디스코드)

More Related Content

Similar to 코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx

소프트웨어 교육 실습
소프트웨어 교육 실습소프트웨어 교육 실습
소프트웨어 교육 실습
Jaehwi Alice Kim
 
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
HYUNJEONG KIM
 
Coding interview
Coding interviewCoding interview
Coding interview
Soohan Ahn
 
01. dp hard
01. dp hard01. dp hard
01. dp hard
승혁 조
 
코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf
ssuser597fbd
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
Suhyun Park
 
DP 중급 2
DP 중급 2DP 중급 2
DP 중급 2
승혁 조
 
Chapter 11 Practical Methodology
Chapter 11 Practical MethodologyChapter 11 Practical Methodology
Chapter 11 Practical Methodology
KyeongUkJang
 
Automated program corrector for programming assignments using Deep Learning
Automated program corrector for programming assignments using Deep LearningAutomated program corrector for programming assignments using Deep Learning
Automated program corrector for programming assignments using Deep Learning
Soo Kim
 
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
ultrasuperrok
 
01. c and time complexity
01. c and time complexity01. c and time complexity
01. c and time complexity
승혁 조
 
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
ultrasuperrok
 
프로그래밍 대회 문제 제작하기
프로그래밍 대회 문제 제작하기프로그래밍 대회 문제 제작하기
프로그래밍 대회 문제 제작하기
인서 박
 
자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기
라한사 아
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능
도형 임
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
Jae-yeol Lee
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
Jay Park
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7KoChungWook
 
2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdf2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdfjinwookhong
 
2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdf2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdfkd19h
 

Similar to 코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx (20)

소프트웨어 교육 실습
소프트웨어 교육 실습소프트웨어 교육 실습
소프트웨어 교육 실습
 
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
 
Coding interview
Coding interviewCoding interview
Coding interview
 
01. dp hard
01. dp hard01. dp hard
01. dp hard
 
코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
 
DP 중급 2
DP 중급 2DP 중급 2
DP 중급 2
 
Chapter 11 Practical Methodology
Chapter 11 Practical MethodologyChapter 11 Practical Methodology
Chapter 11 Practical Methodology
 
Automated program corrector for programming assignments using Deep Learning
Automated program corrector for programming assignments using Deep LearningAutomated program corrector for programming assignments using Deep Learning
Automated program corrector for programming assignments using Deep Learning
 
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
 
01. c and time complexity
01. c and time complexity01. c and time complexity
01. c and time complexity
 
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
 
프로그래밍 대회 문제 제작하기
프로그래밍 대회 문제 제작하기프로그래밍 대회 문제 제작하기
프로그래밍 대회 문제 제작하기
 
자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7
 
2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdf2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdf
 
2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdf2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdf
 

More from ultrasuperrok

코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
ultrasuperrok
 
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
ultrasuperrok
 
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 3주차 스터디 - 재귀
코딩테스트 합격자 되기 3주차 스터디 - 재귀코딩테스트 합격자 되기 3주차 스터디 - 재귀
코딩테스트 합격자 되기 3주차 스터디 - 재귀
ultrasuperrok
 
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
ultrasuperrok
 
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
ultrasuperrok
 

More from ultrasuperrok (7)

코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
 
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
 
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
 
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
 
코딩테스트 합격자 되기 3주차 스터디 - 재귀
코딩테스트 합격자 되기 3주차 스터디 - 재귀코딩테스트 합격자 되기 3주차 스터디 - 재귀
코딩테스트 합격자 되기 3주차 스터디 - 재귀
 
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
 
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
 

코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx

  • 1. 코딩테스트 합격자 되기 C++ 00~ 01장 효율적으로 공부하기 저자 박경록
  • 2. 목차 코딩 테스트를 효율적으로 준비하는 방법 - 타인의 풀이를 보는 공부 법 - 아는 것만 공부하지 말자 - 테스트 케이스를 고려하는 법 - 의사코드 설계하는 법
  • 4. 타인의 풀이를 보는 공부 법(고민) - 시간이 많다면 충분히 문제에 대해 혼자 고민해보는 것이 좋음 But…. “대부분 수험생들은 시간이 부족함”
  • 5. 타인의 풀이를 보는 공부 법(방법) 1. 최소한 30분 ~ 1시간 정도 고민한다. 2. 그래도 답이 나오지 않을 경우, 답안코드를 본다. => 답안 코드에서 본인이 해결하지 못한 부분을 해결한 코드를 정리 => 답안 코드에서 사용한 알고리즘과 매칭되는 부분을 문제에서 분석 => 2주 정도 후에 다시 구현
  • 6. 타인의 풀이를 보는 공부 법(예시 - 문제) 입력: nums = [2, 7, 11, 15], target = 9 출력: [0, 1] 설명: nums[0] + nums[1] = 2 + 7 = 9 이므로 정답은 [0, 1]입니다 제한 : 입력 크기는 최대 100만 이고 제한시간은 1초 입니다.
  • 7. 타인의 풀이를 보는 공부 법(예시 - 내 코드 vs 정답 코드) 해결하지 못한 코드 정답 코드 ① ②
  • 8. 타인의 풀이를 보는 공부 법(정리) 문제 입력값이 100만 인데, O(N^2) 알고리즘으로 접근해서 TLE 발생 - 정답 코드는 unordered_map을 활용해서 O(N)으로 개선함 => 각 숫자를 unordered_map의 키로 활용 깨달은 점 - 다음 부터는 입력값을 꼭 확인해서 문제에서 요구하는 시간복잡도를 충족 시키자! - 자료구조에 의해서도 시간 복잡도가 영향을 받을 수 있음(자료구조에 맞게 구현하므로)
  • 9. 아는것만 공부하지 말자(방법) - 아는 것만 공부하면 얻는 것은 자신감 뿐… 7:3을 지키자. - 단순 기록 대신 나만의 용어로 정리
  • 10. 아는것만 공부하지 말자(7:3) - 기존 지식을 활용한 문제 풀이 - 기존에 틀렸던 부분 복습 - 새로운 개념 학습 및 문제 풀이 - 기존에 많이 틀렸던 알고리즘 문제 풀이 - 해결하지 못한 부분은 명확히 정리 알고있는 부분(30%) 모르는 부분(70%)
  • 11. 단순기록 대신 나만의 용어로 정리하자(방법) - 나열식 정리는 타자연습과 다를바가 없습니다.(머리에 남지 않음) - 개념을 머릿속에서 끝까지 이해한 후에, 완성된 문장으로 정리 합니다. => ??? ….. 이런걸 포함한다면 정리하는 의미가 없습니다.
  • 12. 단순기록 대신 나만의 용어로 정리하자(예시) 정렬 사용자가 정의한 기준대로, 데이 터를 나열하는 것 => 이진탐색 사용 가능 시간 복잡도 비교정렬 : O(NlogN) 비-비교 정렬 : O(N)까지 가능 예시 코드 //something 나만의 언어로 변환
  • 13. 테스트 케이스 설계 하는 법(방법) - 기본 케이스 - 경계값 - 에지 케이스
  • 14. 테스트 케이스 설계 하는 법(기본 케이스) - 문제에서 설명한 “기본 동작”이 제대로 동작하는지 확인하는 케이스 문제: 두 정수를 입력받아 합을 반환하라. 입력: a=2,b=3 기대 출력: 5 테스트 케이스: assert sum(2, 3) == 5 문제: 주어진 문자열을 뒤집어 반환하라. 입력: "hello" 기대 출력: "olleh" 테스트 케이스: assert reverse("hello") == "olleh"
  • 15. 테스트 케이스 설계 하는 법(경계 값) - 입력값의 양 끝값을 테스트 함 문제: 주어진 양의 정수의 제곱근을 반환하라. 정수 부분만 반환한다. 입력 범위: 1에서 10^6 까지 최소값 입력: 1 테스트: assert sqrt(1) == 1 최대값 입력: 10^7 테스트: assert sqrt(10^6) == 1000 문제: 정수 배열과 타겟 정수가 주어졌을 때, 타겟의 인덱스를 반환 하라. 없으면 -1을 반환. 입력: 배열 [2,3,5,7,11], 타겟 3 경계값 테스트 케이스: 배열의 첫 요소: 2 테스트: assert find_index([2, 3, 5, 7, 11], 2) == 0 배열의 마지막 요소: 11 테스트: assert find_index([2, 3, 5, 7, 11], 11) == 4
  • 16. 테스트 케이스 설계 하는 법(에지 케이스) - 예상치 못한 입력값이나 특수한 조건 문제: 주어진 정수가 소수인지 아닌지를 판별하라. 에지 케이스: 음수 입력: 테스트: assert is_prime(-1) == False 입력: 0 0은 소수가 아닙니다. 테스트: assert is_prime(0) == False 입력: 1 1은 소수가 아닙니다. 테스트: assert is_prime(1) == False 문제: 주어진 정수가 소수인지 아닌지를 판별하라. 에지 케이스: 음수 입력: 소수의 정의는 양의 정수에만 적용됩니다. 테스트: assert is_prime(-1) == False 입력: 0 0은 소수가 아닙니다. 테스트: assert is_prime(0) == False 입력: 1 1은 소수가 아닙니다. 테스트: assert is_prime(1) == False
  • 17. 의사코드 작성하기 의사코드 -> 구현 전, 비 프로그래밍 언어로 동작을 나열하는 것 장점 - 구현 전 예외사항을 충분히 고려할 수 있음 - 구현보다 시간이 적게 걸림 - 문제점 발견시 수정이 쉬움
  • 18. 의사코드 설계하기(문제분석 후 바로 구현시 문제점) 문제 분석 구현 - 바로 구현하기가 쉽지 않음 - 구현 후, 문제 수정은 시간이 오래걸림 - 문제가 있어도 확인이 쉽지 않음 - 흐름이 한 눈에 보이지 않음 바로 구현시 아쉬운 점
  • 19. 의사코드 설계하기(의사코드 작성시 장점) 문제 분석 구현 - 코드를 바로 구현하지 않고 자유롭게 설계 후 구현 - 의사코드 작성시 확인되는 문제는 수정이 쉬움 - 의사코드는 흐름을 한 눈에 확인 가능 - 전체적인 구조를 잡고 구현하면 코드 품질이 좋아짐 보완 된점 의사코드 작성
  • 20. 의사코드 설계하기(의사코드 작성법) - 일반인도 이해할 정도의 논리 흐름으로 작성(세부사항까지 필요 없음) - 추후 의사코드 대로 구현하는 경우가 많음 - 프로그래밍적 문법 사용 지양(고민이 많아짐)
  • 21. 의사코드 설계하기(잘못된 예시 vs 잘된 예시) 변수 A를 DataBase에 저장 포인터 변수 P에 컨테이너의 주소값 저장 1. 사용자의 정보를 저장한다: - 사용자의 이름과 나이를 수집한다. - 수집한 정보를 기록한다. 2. 제품 목록을 업데이트한다: - 새로운 제품 정보를 확인한다. - 제품 목록에 새 제품을 추가한다. BAD Good
  • 22. 의사코드 설계하기(예시-알고리즘 문제 1) 알고리즘 문제: "정수 배열이 주어지면, 모든 원소의 합을 구하고, 이를 출력하는 프로그램을 작성하시오." 1. 숫자로 이루어진 리스트를 준비한다. 2. 모든 숫자의 합을 계산한다: - 합을 저장할 곳을 마련한다. - 리스트의 각 숫자를 차례대로 합에 더한다. 3. 계산된 합을 출력한다.
  • 23. 의사코드 설계하기(예시-알고리즘 문제 2) 알고리즘 문제: "사용자가 입력한 두 수를 비교하여 더 큰 수를 출력하는 프로그램을 작성하시오." 1. 사용자로부터 두 개의 숫자를 입력 받는다. 2. 두 숫자를 비교한다: - 만약 첫 번째 숫자가 두 번째 숫자보다 크면, 첫 번째 숫자를 선택한다. - 그렇지 않으면, 두 번째 숫자를 선택한다. 3. 선택된 숫자를 출력한다.
  • 24. 의사코드 설계하기(예시-알고리즘 문제 3) 알고리즘 문제: "리스트에 있는 숫자들 중 가장 자주 등장하는 숫자를 찾아 출력하고, 그 숫자가 몇 번 등장했는지도 출력하는 프로그 램을 작성하시오." 1. 숫자로 이루어진 리스트를 준비한다. 2. 각 숫자가 몇 번 등장하는지 세어서 기록한다: - 숫자별로 등장 횟수를 저장할 공간을 만든다. - 리스트의 각 숫자에 대해, 해당 숫자의 등장 횟수를 1 증가시킨다. 3. 가장 많이 등장한 숫자를 찾는다: - 가장 많이 등장한 숫자를 기록한다. - 모든 숫자의 등장 횟수를 확인하면서, 가장 높은 등장 횟수를 갖는 숫자를 찾는다. 4. 가장 많이 등장한 숫자와 그 등장 횟수를 출력한다.
  • 25. 커뮤니티 소개 - 오픈 카톡방 - 깃허브 - 디스코드
  • 26. 커뮤니티 소개(오픈카톡방) cont’d - 저자 직접 운영 - 대략 400명 정도 인원이 자유롭게 소통 - 개인적인 주제 및 코딩 관련 소통 가능
  • 28. 커뮤니티 소개(깃허브) cont’d - 책 문제의 정답코드 - 코딩테스트 준비를 위해 필요한 자료구조 및 알고리즘 - C++ 기본 문법 - STL의 성능 비교
  • 30. 커뮤니티 소개(디스코드) cont’d - 모각코 진행 - 공식 스터디 / 개인 스터디 모집 공고 및 진행 - 책 관련 문의 / 답변