-
SW 문제해결 응용 - 구현 - 시작하기Algorithm/SWEA Learn 2023. 3. 31. 10:53
1. SW 문제 해결역량의 의미와 역량강화 방법을 설명할 수 있다.
2. 알고리즘의 필요성과 알고리즘의 성능 측정 방법 중 하나인 시간복잡도에 대해 설명할 수 있다.
3. 비트 수준의 연산과 자주 활용되는 표현을 설명할 수 있다.
4. 다양한 진법들과 이들 사이에 변환 방법을 설명할 수 있다.
5. 컴퓨터에서 실수 자료형의 표현과 특징을 설명할 수 있다.
1차. SW 문제 해결
프로그래밍하기 위한 제약 조건과 요구사항
- 프로그래밍 언어의 특성
- 프로그램이 동작할 HW와 OS에 대한 지식
- 사용자 대응 시간 제한
- 라이브러리의 유의 사항들
- 프로그램이 사용할 수 있는 최대 메모리
- 재사용성 높은 간결한 코드
문제 해결 과정
- 문제를 이해하자.
- 문제를 재정의하자.
- 고려사항을 정리하자.
- 문제 해결 방안을 마련하자.
- 계획에 오류가 있는지 확인하자.
- 프로그램으로 구현하자.
- 개선사항을 찾자.
- 종료
문제가 어려워요!
- 비슷한 문제를 푼 경험을 생각해보자.
- 단순하게 시작해서 좋은 방법을 찾아 보자.
- 문제를 단순화하자. 그림으로 그리자. 수식으로 표현하자.
- 문제를 작은 여러개의 문제로 바꿔보자.
- 뒤에서부터 시작해서 문제를 풀어보자.
- 특정 형태의 답만이 필요한지 생각해보자.
2차시. 알고리즘 복잡도
알고리즘이란?
- 유한한 단계를 통해 문제를 해결하기 위한 절차나 방법
- 컴퓨터가 어떤 일을 수행하기 위한 절차
알고리즘의 효율성
- 공간적 효율성 : 얼마나 많은 메모리 공간을 요하는가?
- 시간적 효율성 : 얼마나 많은 시간을 요하는가?
- 복잡도가 올라가면 효율성은 낮아진다.
- 입력크기가 크면 문제가 된다.
- 복잡도의 점근적 표기는 주로 입력 크기에 대한 함수로 표기한다.
- 단순 함수 표현을 위해 점근적으로 표기하는데, 입력 크기 n이 무한대로 커질 때의 복잡도를 간단히 표현하기 위해 사용하는 표기법이다.
- Big-O, Big-Omega, Theta가 있다.

빅오 표기법
- 복잡도의 점근적 상한을 나타낸다.
- 가장 높은 최고차항에 상수 c를 곱한 값이다.
- 상수 버리는 이유: 어차피 n^2라면 각도만 달라진다.


빅-오메가


세타-표기

효율적 알고리즘의 필요성


3차시. 비트 연산
비트 연산자
- 비트연산이 빠른 이유 : 트랜지스터라는 게 있는데 연산하는 반도체 소자이다. 트랜지스터 -ㅁ= 이렇게 생겨서 0과 1을 반환한. 이게 오지게 모인 게 CPU이다. 좋은 컴퓨터일수록 비트 연산 속도가 빠르다.
- 반도체가 뭐지? 반만 도체. 1과 0을 반환.
- 트랜지스터의 결과를 CPU 가 계산한다.

- XOR! 둘 중 하나가 1이면 1을 반환하나, 둘 다 1이면 0을 반환한다. (어려워요)
- << 사용했다. 트랜지스터가 << 신호를 보내고 cpu가 연산을 한다. 자바로 코드 짜면 메모리(ram, 휘발성 메모리, 속도가 오지게 빠르)의 stack에 쌓이고, 트랜지스터가 가지고 간다.
- <<를 사용하면 00000000 00000000 00000000 00001000에서 00000000 00000000 00000000 00010000으로 된다.
- 빠른 이유는 이게 계산 연산 이런 게 아니라서 그렇다. 실제로는 데이터를 변경시키는 것이다. new를 사용해서 새로 생성하는 개념이 아니라서 더 빠르다. 한 개 수를 바꾸는 게 빠르니까 더 빠르다!!!




비트 연산 예제

엔디안



Byte Alignment





4차시. 진수
진법 변환




5차시. 실수


부동 소수점 표기법






'Algorithm > SWEA Learn' 카테고리의 다른 글
SW 문제해결 응용 - 구현 - 탐욕알고리즘 (0) 2023.04.05 SW 문제해결 응용 - 구현 - 완전검색 (0) 2023.04.03 SW 문제해결 기본 - Tree (0) 2023.03.30 SW 문제해결 기본 - List (0) 2023.03.29 SW 문제해결 기본 - Queue(BFS(너비 우선 탐색)) (0) 2023.03.28