[메일 주소 변경되었습니다.]
송상수 sssong@swedunet.org / https://www.facebook.com/gi.sik.in / swedunet.org
광주_전남 지역 초/중/고 교사분들을 대상으로 한
소프트웨어 교사 연수중 알고리즘 파트 부분입니다.
Computational Thinking의 핵심인 알고리즘을
다양한 예를 들어 쉽게 설명하고자 애썼습니다.
SW교육을 하시는 분들께 도움이 되길^^;
언플러그드 활동의 이론과 실제(Unplugged Activity / Computing)Sangsu Song
[메일 주소 변경되었습니다.]
송상수 sssong@swedunet.org / https://www.facebook.com/gi.sik.in / swedunet.org
교육부에서 연구학교 교원 전체를 대상으로한
언플러그드 활동의 이론과 실제(Unplugged Activity / Computing) 강의내용입니다.
언플러그드 컴퓨팅의 개론과 활동 사례가 제시되어 있습니다.
[메일 주소 변경되었습니다.]
송상수 sssong@swedunet.org / https://www.facebook.com/gi.sik.in / swedunet.org
광주_전남 지역 초/중/고 교사분들을 대상으로 한
소프트웨어 교사 연수중 알고리즘 파트 부분입니다.
Computational Thinking의 핵심인 알고리즘을
다양한 예를 들어 쉽게 설명하고자 애썼습니다.
SW교육을 하시는 분들께 도움이 되길^^;
언플러그드 활동의 이론과 실제(Unplugged Activity / Computing)Sangsu Song
[메일 주소 변경되었습니다.]
송상수 sssong@swedunet.org / https://www.facebook.com/gi.sik.in / swedunet.org
교육부에서 연구학교 교원 전체를 대상으로한
언플러그드 활동의 이론과 실제(Unplugged Activity / Computing) 강의내용입니다.
언플러그드 컴퓨팅의 개론과 활동 사례가 제시되어 있습니다.
현장 교사들을 위한 SW교육 실습
<강의내용>
01 언플러그드 활동 소개
- 컴퓨터과학 개념 중심
- 알고리즘 중심
02 교과연계 프로젝트 실습
- [수학] 동전의 앞/뒷면이 나올 확률
- [음악] 나만의 음악 악보 프로그램 만들기
03 피지컬 컴퓨팅 사례 소개
- 메이키메이키
- 센서보드
- 아두이노
코딩테스트를 처음 공부하는 분들을 위한 강의 입니다.
★★아래 필수 확인(영상강의,저자소통방,저자카페 링크 있음)★★
유투브 강의 : https://youtu.be/wtBUKpXPN4Q?si=kNdmLgrpQm7xB-j_
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
현장 교사들을 위한 SW교육 실습
<강의내용>
01 언플러그드 활동 소개
- 컴퓨터과학 개념 중심
- 알고리즘 중심
02 교과연계 프로젝트 실습
- [수학] 동전의 앞/뒷면이 나올 확률
- [음악] 나만의 음악 악보 프로그램 만들기
03 피지컬 컴퓨팅 사례 소개
- 메이키메이키
- 센서보드
- 아두이노
코딩테스트를 처음 공부하는 분들을 위한 강의 입니다.
★★아래 필수 확인(영상강의,저자소통방,저자카페 링크 있음)★★
유투브 강의 : 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://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
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
나만의 언어로 변환
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. 가장 많이 등장한 숫자와 그 등장 횟수를 출력한다.