$24.99
[안내사항]
1. 모든 문제는 파일 입출력을 기본으로 합니다. Input 파일은 input.txt, output 파일은 output.txt 을 사용하니, 이 점 유의해서 프로그램을 작성해 주시기 바랍니다.
2. 채점용 testcase를 통과한 개수에 비례하여 프로그램 기능 점수가 부여됩니다. - (통과 case / 총 case) * 채점 기준에 명시된 프로그램 기능 점수 - testcase는 공개되지 않습니다.
[감점]
1. 제출 기한이 지나면 얻은 총점의 20% 감점
2. 하루(24시간) 늦을 때마다 추가 20%씩 감점
- 1일 이내: 20% 감점, 2일 이내: 40% 감점, 3일 이내: 60% 감점 4일 이내:80% 감점
- 4일 이상 지연: 0점
3. 컴파일이 정상적으로 되지 않을 경우 프로그램 기능 점수 0점 [제출방식]
예) prob1_20219999.zip, prob2_20219999.zip, prob3_20219999.zip
[채점 기준]
1. 프로그램 기능 – 50%
⚫ 프로그램이 요구 사항을 모두 만족하면서 올바로 실행되는가?
2. 프로그램 설계 및 구현 – 35%
⚫ 요구 사항을 만족하기 위한 변수 및 알고리즘 설계가 잘 되었는가?
⚫ 설계된 내용이 요구된 언어를 이용하여 적절히 구현되었는가?
⚫ 각 문제에서 제시한 세부 조건의 유의사항을 모두 만족하였는가?
⚫ 출력파일 output.txt가 주어진 형식에 맞는가?
3. 프로그램 가독성 – 5%
⚫ 프로그램이 읽기 쉽고 이해하기 쉽게 작성되었는가?
⚫ 변수 명이 무엇을 의미하는지 파악하기 쉬운가?
⚫ 프로그램의 소스 코드를 이해하기 쉽도록 주석을 잘 붙였는가?
4. 보고서 구성 및 내용, 양식 – 10%
⚫ 보고서는 적절한 내용으로 이해하기 쉽고 보기 좋게 잘 작성되었는가?
⚫ 보고서의 양식을 잘 따랐는가?
⚫ 각 문제에서 제시한 질문이 있다면, 그에 대한 답변이 충분한가?
[주의사항]
1. 다른 사람의 프로그램이나 인터넷에 있는 프로그램을 단순히 복사(copy)하거나 수정해서 제출하면 부정행위로 간주됩니다. 부정행위 발견 시 ‘F’ 학점을 받을 수 있으며, 학과에서 정한 기준에 따라 추가적인 불이익이 있을 수 있습니다.
2. Visual Studio 2022에서 원활한 입출력을 위해 소스코드 맨 위에
“#define _CRT_SECURE_NO_WARNINGS”을 선언해 주시기 바랍니다.
이를 선언하면 Visual Studio에서 scanf, fopen 등을 사용할 수 있습니다.
20점)
포항공대 컴퓨터공학과 학생 연수는 객체 지향 프로그래밍 수업을 본격적으로 수강하기 전, C 언 어 복습을 위해 계산기 프로그램을 만들어 보려고 한다.
1. 이때 연산자와 두 개의 숫자를 받아 그 결과를 저장하는 프로그램을 절자 지향 프로그래 밍으로 구현하시오.
2. 만약 계산기 프로그램을 객체 지향 프로그래밍으로 구현하면 어떤 장점이 있을지, 혹은 어떤 기능을 쉽게 추가할 수 있을지에 대해 생각해 본 후, 보고서 “3. 토론 및 개선”에 자신의 의견을 간략히 작성하시오.
[입력] 연산자는 char 자료형이며, 두 개의 숫자는 float 자료형이다. 계산기가 받아들일 수 있는 연산자
의 집합은 {‘+’, ‘-‘, ‘*‘, ‘/‘} 이며 각각 순서대로 {덧셈, 뺄셈, 곱셉, 나눗셈}을 의미한다. 연산자와 각 숫자 사이에는 공백 한 칸이 있다.
[출력]
입력으로 받은 두 개의 숫자를 입력으로 받은 연산자로 연산한 결과를 출력해야 한다.
[세부 조건]
1. 파일 입출력은 C 언어의 표준 입출력 (stdio.h) 또는 C++의 파일 입출력 (fstream) 둘 다 사용 가능.
2. 계산 결과는 항상 소수점 아래 3자리로 표현하며, 계산 결과가 소수점 아래 3자리보다 길 경우 소수점 셋째 자리까지 반올림하여 출력.
- [입출력 예시]에서, 3.986 ∗ 2.515 = 10.02479 ≅ 10.025 (소수점 셋째 자리로 반올림)
3. 입력의 두 번째 숫자에 0이 들어오는 상황은 고려하지 않는다.
[입출력 예시]
input.txt output.txt
+ 1.35 2.47
* 3.986 2.515
/ 24.999 3.900
- -101.35 2.47 3.820
10.025
6.410
-103.820
35점)
포항공대 컴퓨터공학과 학생 철수는 연예인 아이유를 좋아한다. 철수는 크롤링을 통해 인터넷 사이트에서 아이유 사진을 다운로드 받았으나, 사진이 너무 많아 이를 연도 및 장소 코드를 기준으로 정렬하여 저장하고자 한다.
1. 이때 연도 및 장소 코드를 기준으로 오름차순 정렬하는 프로그램을 selection sort 를 이용해 C++로 직접 구현하시오.
2. Selection sort 의 장점은 구현이 쉽다는 점이다. 이때, selection sort 의 단점 두 가지를 보고서의 “3. 토론 및 개선”에 간략히 작성하시오.
[입력] 연도와 장소 코드는 input.txt 파일에 저장되어 있다. 연도는 4 자리 정수이며, 장소 코드는 임의의 6 자리 string 이다. 연도와 장소 코드 사이엔 공백 한 칸이 있다.
[출력] 정렬된 연도와 장소는 공백 한 칸을 포함해 output.txt 파일에 출력한다.
[세부 조건]
1. 먼저, 연도를 기준으로 오름차순 정렬이 되어야 한다. 연도가 같은 경우 장소 코드를 기준으로 오름차순 정렬이 되어야 한다.
2. C++ STL 에서 제공하는 vector 와 같은 container 및 sort 함수는 사용할 수 없다.
[입출력 예시]
input.txt output.txt
2008 hyojam
2015 mudofv
2008 musicb
2008 musicb
2015 mudofv
45점)
지금 우리 포항공대에 좀비가 출현했다! 포항공대 컴퓨터공학과 학생들은 학교 지하통로로 학교 를 탈출하려고 한다. 학생들은 지하 통로 지도를 가지고 있으며, 기억력이 좋은 학생 청산이 지도 에 좀비가 있는 곳, 출구 열쇠 위치, 출구 위치를 표시해 두었다.
1. 이때, 학생들이 열쇠를 찾아 출구에 도착하기까지 걸리는 최단거리를 구하시오.
[입력] 지도는 input.txt 파일에 저장되어 있다. 좀비가 있어 통과할 수 없는 장소는 ‘1’, 학생들이 통과할 수 있는 장소는 ‘0’으로 지도에 표시되어 있다. 열쇠 위치는 ‘k’, 출구 위치는 ‘e’로 표시되어 있다.
[출력] 열쇠를 찾아 출구에 도착하기까지 소요된 최단거리를 output.txt 파일에 출력한다.
[세부 조건]
1. 지도의 크기는 10 x 10 이며, index는 row, column 순서를 갖는다.
- 아래 [입출력 예시]에서 map[0][4] == ‘k’ 이며 map[9][9] == ‘e’ 이다.
2. 학생들은 맨 처음 지도 상에서 (0,0)에 위치한다.
- 맨 처음 위치 map[0][0]에선 움직이지 않은 것으로 간주한다.
- 아래 [입출력 예시]에서 열쇠(‘k’)까지의 최단거리는 18 이다.
3. 이동은 좌, 우, 상, 하 방향으로만 가능하며, 대각선 방향 이동은 불가능하다.
4. 출구까지의 최종 거리는 시작 지점으로부터 열쇠 위치 까지의 거리와, 열쇠 위치로부터 출구까지의 거리의 합산이다.
- 아래 [입출력 예시]에서 열쇠(‘k’)로부터 출구(‘e’)까지 거리는 28이다.
- 아래 [입출력 예시]에서 주어진 조건을 만족하는 최단거리는 46이 된다.
5. 열쇠 및 출구까지는 항상 도달 가능하다.
6. 프로그램 구현에 있어 이전 수업에서 배운 자료구조인 스택, 큐 등은 사용할 수 있다. 하지만, C++ STL 등 라이브러리는 사용할 수 없으며, 직접 구현하여야 한다.
7. 전역변수는 사용할 수 없다.
[입출력 예시]
input.txt output.txt
0 0 1 1 k 0 0 0 0 1
1 0 1 1 1 1 0 1 0 1
1 0 1 1 1 0 1 1 0 1
1 0 0 0 0 0 0 0 0 1
1 0 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0
1 0 1 1 0 1 1 1 1 0
1 0 1 0 0 1 1 0 0 0
0 0 1 1 0 1 1 1 1 1
1 1 1 1 0 0 0 0 0 e 46