5주차 컴퓨터개론 과제 - y22seul/computer GitHub Wiki
1차시
1-1
- 라면 끓이는 순서도 알고리즘일까 : 알고리즘이다. 순서, 절차, 목표 결과가 있기 때
- 알고리즘의 정의 : 문제 해결을 위한 유한하고 명확한 절차
- 기본 흐름 : 입력(데이터-문제에 필요한 정보) > 처리 단계(절차-입력을 바탕으로 단계를 거쳐 해결) > 출력(결과-문제 해결의 결과물)
- 자판기 구매 : 입력(투입 금액, 음료 선택) > 처리(금액 확인, 가격 비교, 거스름돈 계산) > 출력(음료, 거스름돈, 안내 메세지)
알고리즘은 프로그램이 아니다. 알고리즘은 절차이고, 프로그램은 구현하는 것
1-2
- 순서만 있으면 좋은 알고리즘일까 : 순서만 있다고 해서 좋은 알고리즘이 아닌, 정확하고 명확하며 효율적이어야 한다.
- 좋은 알고리즘의 조건 : 명확성, 유한성, 정확성, 일반성, 효율성
- 모호한 지시는 사람마다 다르게 해석될 수 있기 때문에 명확한 지시가 필요
- 종료 확인 : 유한 단계 > 종료 / 무한 반복 > 미종료
- 학교 가는 절차를 다섯 조건으로 평가 : 명확성(어떤 교통수단을 어떻게 이용하는지 구체적이지 않음), 유한성(학교에 도착한 뒤 수업 준비를 하면 절차 끝), 정확성(제시된 순서대로 진행하면 학교에 도착해 수업 준비 가능), 일반성(대중교통을 이용하는 사람에 한해서만 적용 가능), 효율성(학교에 도착할 수는 있지만, 최적의 경로나 교통수단을 선택하는 과정이 없기 때문에 시간과 노력을 절약하는 지는 알 수 없음.)
결과만 맞으면 충분한 것이 아닌, 시간/자원/예외도 확인해야 함
1-3
- 복잡한 문제를 어떻게 구조화할까 : 큰 문제를 작은 문제로 나누고, 각 문제의 간계와 해결 순서를 정리
- 입력 : 데이터, 형식, 범위 > 입력은 문제의 출발점
- 처리 : 계산, 비교, 조건, 반복 > 문제를 해결하기 위한 논리적 단계들
- 출력 : 결과값, 표시형식, 오류메세지 > 명확하고 이해하기 쉬운 출력 제공
1-4
- 절차와 조건을 한눈에 보려면 : 순서도를 사용하면 됨.
- 기본 도형 : 타원(시작, 종료), 사각형(처리), 평행사변형(입출력), 마름모(판단)
- 화살표(실행 방향과 연결) -점검 기준 : 모든 경로 연결, 참/거짓 표시, 종료 존재
1-5
-
언어를 몰라도 정확히 적을 수 있을까 : 프로그래밍 언어를 몰라도 알고리즘을 설계하고 표현할 수 있지만, 컴퓨터가 직접 실행하려면 실행 가능한 프로그래밍 언어로 작성
-
의사코드 : 자연어+프로그래밍 구조 > 문법보다 논리
-
작성 규칙 : 한줄 한동작, 들여쓰기, 의미 있는 변수, 일관된 표현
-
짝수/홀수 판정 의사코드 작성 : 시작 정수 N을 입력받는다.
만약 N을 2로 나눈 나머지가 0이면 "짝수"를 출력한다. 아니면 "홀수"를 출력한다. 끝만약 끝
아무렇게나 쓴 설명문이 아닌, 구현 가능한 구체적 절차
2차시
2-1
- 명령은 기본적으로 어떤 순서로 실행될까 : 특별한 조건이나 반복이 없다면 명령은 작성된 순서대로 실행
- 순차 구조 : 위에서 아래로 한 번씩 실행
- 의존 관계 : 입력 > 계산 > 출력 / 순서 변경 시 결과 변경
- 직사각형의 넓이 절차를 배열 : 시작한다.
직사각형의 가로 길이를 입력받는다.
직사각형의 세로 길이를 입력받는다.
가로 길이와 세로 길이를 곱한다.
계산한 넓이를 출력한다.
끝낸다
2-2
- 조건에 따라 다른 행동을 하려면? : 조건에 따라 다른 행동을 하려면 선택 구조(조건문)를 사용
- 참과 거짓 : 참(참일 때 실행) / 거짓(거짓일 때 실행)
- 세 가지 선택 : 단일 선택(한가지 경로만 선택), 양자택일(두가지 중 하나 선택), 다중 선택(여러 가지 중 하나 선택)
2-3
- 같은 일을 자동으로 여러 번 하려면? : 같은 일을 자동으로 여러 번 하려면 반복 구조(반복문)를 사용
- 횟수 반복 : 정해진 횟수만큼 반복
- 조건 반복 : 조건이 참인 동안 반복
- 4가지 요소 : 초기값(반복을 시작하기 전에 처음 값을 설정), 반복 조건(반복을 계속할지 결정하는 조건), 실행 내용(반복할 때마다 수행할 작업), 상태 변화(조건이 언젠가 거짓이 되도록 값을 변화시킴)
조건이 항상 참이면 멈추지 않고 무한 반복, 조건이나 상태 변화가 잘못디면 실행 횟수가 틀려짐.
2-4
- 계산 중간 값은 어디에 기억할까? : 계산 중간 값은 변수에 기억
- 변수 : 이름을 붙인 저장 공간
- 대입 : 합계 = 합계 + 가격
계산을 시작하기 전에 변수 값을 0으로 설정해야 정확하기 때문에 반드시 초기화 필요
변수 이름은 값이 아닌, 기억 장소의 이름이고 값은 그 장소에 저장된 데이터
2-5
- 실행 전에 논리 오류를 어떻게 찾을까? : 실행 전 논리 오류를 찾으려면 데스크 검증을 하면 됨.
- 추적표
- 시험 입력 : 정상값(일반적인 입력), 경계값(경계에 있는 입력), 예외값(잘못된 입력)
하나의 입력만으로는 논리 오류를 찾기 어렵기 떄문에 다양한 입력과 추적을 통해 검증해야함.
3차시
3-1
- 큰 문제를 어떻게 작게 나눌까? : 문제 분해를 사용해서 나눈다.
- 문제 분해 : 복잡한 문제를 해결하기 쉬운 작은 문제들로 나누는 방법
- 패턴 찾기 : 입력 > 처리 > 출력 반복
- 학교 축제를 네 하위 문제로 나누기 : 계힉 수립, 프로그램 준비, 물품 및 시설 준비, 축제 운영
무조건 작게 나누는 것이 아닌, 경계와 연결을 명확히 해야함.
3-2
- 무엇을 남기고 무엇을 생략할까 : 추상화를 사용하면 됨.
- 추상화 : 복잡한 문제에서 중요한 정보만 남기고 불필요한 정보를 생략하는 것
- 모델링 순서 : 목적 > 변수 선택 > 관계 > 가정 > 검증
추상화는 대충 생략하는 것이 아닌, 목적에 따른 선택을 하는 것이다.
3-3
- 원하는 항목을 더 빠르게 찾으려면? : 탐색 알고리즘을 사용하면 됨.
- 순차 탐색 : 처음부터 차례대로 항목을 확인. 항목이 정렬되어 있지 않아도 사용 가능
- 이진 탐색 : 정렬된 자료의 가운데 항목을 확인하고, 찾는 항목이 있는 쪽만 다시 탐색, 자료가 많을 때 빠르게 찾기 가능
- 선택 기준 : 정렬 여부(정렬되어 있으면 이진 탐색/정렬되어 있지 않으면 순차 탐색), 목록 크기(목록이 클수록 이진 탐색의 효과가 크게 증가), 정렬 준비 비용(정렬 되어 있지 않다면 정렬 비용을 고려해야 함)
3-4
- 순서를 바꾸면 왜 찾기 쉬울까? : 자료를 규칙적으로 정렬할 수 있어서 원하는 항목을 더 빠르게 찾을 수 있기 때문
- 정렬 기준 : 숫자, 문자, 날짜, 오름차순/내림차순
- 선택 정렬 : 남은 값 중 최소 선택 > 앞으로 이동
- 버블 정렬 : 이웃 값 비교 > 필요 시 교환
동점 처리(같은 값의 순서를 유지할 지 여부를 정의), 한글/대문자 규칙(문자 정렬 시 비교 규칙 명확히), 기준 명확히(정렬 기준과 방향을 코드와 문서에 정확히 기록)
3-5
- 여러 방법을 평가하는 기준 : 정확성, 실행 시간, 메모리, 이해/유지보수, 예외 처리
- 입력 크기 : 작은 데이터 > 중간 데이터 > 큰 데이터
- 탐색 비교 : 순차 탐색(하나씩), 이진 탐색(절반씩) > 이진 탐색은 데이터가 정렬되어 있어야 함
- 검증 과정 : 테스트 입력 > 기대 결과 > 실제 결과 > 원인 수정 > 재시험