cpp 25

소스코드 유사도 검사, 카피 잡기 Code plagiarism detector - MOSS (Windows GUI)

자료구조 TA 하는데 코드 카피하는 사람들이 의외로 많다. 안 들킬줄 알았나보다. 조금의 수정도 없이 뻔뻔하게 족보를 그대로 제출하는 사람들이 있는 반면, 교묘하게 함수명/변수명을 바꾸는건 너무나 뻔한 수법이고, if (smth == NULL) A else B 가 원문이면 if (smth != NULL) B else A 이런식으로 순서를 조금 바꿔서 안 들키려고 하는 사람도 있었다. 뭐라도 조금 바꾼건 노력이 가상하다고 해야하나? 아무튼 인터넷 공개 소스코드는 어디까지나 참고만 해야한다. 딱 보기에 베낀게 뻔해서 바로 0점 매기려고 했는데 확실하게 짚고 가고싶었다. 그래서 소스코드 유사도는 어떻게 측정하는지 찾다가 MOSS를 발견. 사용법은 how to use moss치면 많이 나오는데 보니까 다 lin..

FYI 2021.04.29

[C++] 1193 분수찾기

편의상 각각의 주황색 화살표를 '행'이라 칭하겠음. int c와 total은 x번째 분수를 구하기 위해 총 몇 개의 행을 지나야 하는지 세기 위해, order는 x번째 분수가 마지막 행의 몇 번째 순서의 값인지 파악하기 위한 변수이다. total 값이 x 값보다 크거나 같아질 때까지 1, 2, 3, ... 차례대로 더해준다. order는 x가 속한 행의 직전 행까지의 c의 합을 빼준 값을 x 에서 빼서 구해준다. ex) x가 14면 c==5, total==15 에서 break. order는 14-(15-5) = 4가 된다. 즉 구하려는 분수가 마지막 행의 4번째 값이라는 뜻. 그 후 행이 홀수행인지 짝수행인지에 따라서 분수를 출력하는 규칙을 달리 정해준다. #include using namespace s..

Training/BOJ 2021.03.09

[C++] 10996 별 찍기 - 21

규칙은 N개로 이루어진 일정의 패턴을 N번 반복한다는 것이다. 그래서 출력되는 총 별의 갯수는 N*N개다. 패턴은 N이 짝수일 때와 홀수일 때, 두 가지로 나눠지는데 짝수일 때는 첫번째 줄에 N/2개, 그 다음 줄에 한 칸 띄고 N/2개를 출력하는 게 한 세트이다. 이 세트를 똑같이 N번 반복해서 출력한다. 홀수일 때에는 첫째 줄에 N/2+1개, 그 다음 줄에 한 칸 띄고 N/2개를 출력하는 게 한 세트. 홀수도 마찬가지로 세트를 N번 반복 출력한다. #include using namespace std; void PrintStars(int N) { if (N % 2 == 1) { for (int i = 0; i < N; i++) { for (int stars1 = 0; stars1 < N / 2 + 1;..

Training/BOJ 2020.08.10

[C++] 2446 별 찍기 - 9

아무리 봐도 맞았는데 자꾸 출력 형식이 잘못되었다고 하길래 검색해봤다. 나와 같은 문제를 겪은 사람이 있었다. omg ㅋㅋ... 아무튼 출력형식 말고도 애초에 코드 짜면서 좀 애먹었던 문제. ********* ******* ***** *** * *** ***** ******* ********* N*N 크기의 정사각형이 있다고 가정. 각 줄마다 조건에 맞게 앞뒤로 *을 뺀 만큼 그 자리를 공백으로 채워주는 방식으로 처리했다. 물론 뒤쪽에도 열심히 공백을 채워줘서 결국 문제가 발생했지만. 아무튼 조건에 맞게 앞쪽에만 공백 채우고, 별 출력해주면 끝. 별 하나만 찍히는 중간지점을 기준으로 두 영역으로 나눠서 계산했다. #include using namespace std; int main() { int N; c..

Training/BOJ 2020.08.10

[C++] 10809 알파벳 찾기

코드 짤 때부터 이렇게 하는게 맞나 싶어서 제출 한 다음에 다른 사람들이 쓴 코드를 찾아봤는데 역시 쉬운 방법이 있었다. STL 함수는 많이 써보고 많이 외워두자. 처음에 제출한 코드 #include #include using namespace std; void Location(string x) { int* loc = new int[26]; for (int i = 0; i < 26; i++) loc[i] = -1; for (int j = 0; j < x.length(); j++) { char ch = x[j]; //cout S; int* loc = new int[26]; for (int i = 0; i < 26; i++) loc[i] = -1; int c = 97; for (int j = 0; j < 2..

Training/BOJ 2020.08.10

[C++] 2869 달팽이는 올라가고 싶다

먼저 가장 확실한 것부터 처리하고 시작한다. 정상에 올라가기 전까지, 하루에 A-B 만큼 꾸준히 올라가는 그 시기를 먼저 계산한다. (V-A)/(A-B) 를 계산한 몫이 하루동안 A-B 만큼 올라간 기간의 일수다. days = (V - A) / (A - B) 라고 한다면, 이제 남은 거리는 V - days * (A - B) 만큼이 될 것이다. left_distance = V - days * (A - B) 라고 하자. 여기서 두 가지의 경우로 나뉜다. 한 가지는 남은 거리가 A보다 작거나 같은 경우, 두번째는 남은 거리가 A보다 큰 경우. 첫번째 경우는 자명하게도 days 에서 하루만 더 추가해주면 된다. (정상에 오른 후에는 미끄러지는 경우를 고려하지 않으므로) 두번째 경우, 남은 거리는 A보다 크지만 ..

Training/BOJ 2020.08.08

[C++] 11주차 과제7

이원탐색트리를 구현한다. 임의의 정수 리스트를 입력받아 이원탐색트리에 저장한다. 이원탐색트리는 연결리스트를 사용하여 구현한다. 이원탐색트리를 중위순회하여 정렬된 순서로 출력한다. 입력물: 정수리스트 출력물: 입력한 정수리스트의 정렬된 결과 (출력 결과물). * 프로그램 내용 외에 다른 내용이 출력된다면 감점이 될 수 있으니 유의바람. Code #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #define N 1000 using namespace std; template class Tree; // 전방선언 template class TreeNode { friend class Tree; private: T data; TreeNode* ..

[C++] 9주차 과제6

과제 4 다항식 입력, 출력, 계산하는 프로그램을 연결리스트로 구현한다. (리스트 반복자 반드시 사용) 다항식은 객체(class)로 생성해야 하며, 다항식 연산을 위하여 연산자 오버로딩 기능을 이용한다. 다항식 a, b, c를 입력받아 문제에 주어진 연산을 수행한다.(다양한 입력 예를 테스트하는 것을 추천함) 다항식 입력은 (계수, 지수) 표현 형태를 이용한다. 다항식의 출력 형식은 첨부파일과 같은 형식을 따른다. 첨부파일의 프로그램 코드를 실행한다. 헤드노드를 갖는 원형연결리스트로 구현한다.(리스트 반복자 반드시 사용) 문자열 입력으로 .이 입력될 때까지 재입력을 받도록 한다. 헤더와 메인 파일은 분리하지 않고 한 개의 cpp파일을 제출한다. 입력값을 반복적으로 받을 수 있게 하고, .(마침표)를 입력..

[C++] 7주차 과제5

간단한 수식을 입력 받아서 계산을 해주는 계산기 프로그램을 작성한다. 반드시 Template 클래스와 스택을 사용하여 구현한다. 자세한 내용은 첨부한 pdf 파일을 참조하여 작성한다. #문자열 입력으로 .이 입력될 때까지 재입력을 받도록 한다. #헤더와 메인 파일은 분리하지 않고 한 개의 cpp파일을 제출한다. #입력값을 반복적으로 받을 수 있게 하고, .(마침표)를 입력하면 프로그램을 종료하도록 한다. 입력: 중위표기식 수식인 문자열 출력: 수식 계산 결과값, 입력 수식의 후위표기식 Code #include #include #include using namespace std; template class Stack { public: Stack(int stackCapacity = 10); bool IsEm..

[C++] 5주차 과제4

다항식을 입력, 출력, 계산하는 프로그램을 구현한다. 다항식은 객체(class)로 생성해야 하며, 다항식 연산을 위하여 연산자 오버로딩 기능을 이용한다. 다항식 a, b, c를 입력받아 문제에 주어진 연산을 수행한다.(다양한 입력 예를 테스트하는 것을 추천함) 다항식 입력은 (계수, 지수) 표현 형태를 이용한다. 다항식의 출력 형식은 첨부파일과 같은 형식을 따른다. 첨부파일의 프로그램 코드를 실행한다. 입력물: 다항식 a, b, c, 정수 x 출력물: 첨부파일의 프로그램 코드를 실행한 결과물(출력 결과물). * 연산자 오버로딩을 구현해야함. * 프로그램 내용 외에 다른 내용이 출력된다면 감점이 될 수 있으니 유의바람. 입력은 0~9까지로 음수 예외처리는 하지 않으셔도 됩니다. Code #include #..

[C++] 3주차 과제3

첨부파일(HW3.pdf)에 제시된 문제를 C++ 프로그램으로 작성하라. 입력 파일의 제목은 "input.txt"로 통일 (문장부호, 중복 단어를 포함한 예문 사용) 결과물(출력할 내용) : 입력파일 내용, 단어 정렬 결과, 중복 제거 결과, 단어 검색 결과 예 단어 정렬 결과, 중복 제거 결과 등은 (단어 위치, 단어)와 같이 쌍으로 표현하며, 출력 형식(표, 리스트 등)은 자유로이 선택 검색 예는 입력에 포함되어 있는 단어, 없는 단어 각 3개씩 검색하여 결과 보이게 한다. 프로그램의 종료 없이 한 번의 실행으로 반복적으로 검색할 수 있도록 한다. (.(마침표) 입력시 프로그램 종료) 문장부호는 최소 '"!?,. 6개를 제외시킨다. 문장에 존재하는 단어를 입력할 시에는 단어의 위치(1부터 시작), 없는..

[C++] 2주차 과제2

1주차에 작성한 학과명, 학번, 이름, 생년월일, 나이, 현재날짜를 출력하는 C++ 프로그램을 수정하여 다음 기능을 포함하도록 작성하라. Exception handling을 구현하기 위한 try-catch의 구조를 이용하여 사용자의 입력 데이터에 오류가 있을 때 처리하는 프로그램을 작성하라. (사용자의 입력 오류로 프로그램이 오작동하는 경우가 발생하지 않도록 최대한 대처할 수 있도록 할 것) 예: 생일 입력시 "2000/03/33"과 같이 잘못된 날짜를 입력한 경우 다시 입력할 것을 요구함 Code // use class Date // 이름, 학부(과)명에 숫자가 들어가지 않고, 학번에는 숫자만 들어간다고 가정했습니다. #include #include #include #include #include #p..

[C++] 1주차 과제1

학과명, 학번, 이름, 생년월일을 입력받아서 학과명, 학번, 이름, 생년월일, 나이, 현재날짜를 출력하는 C++ 프로그램을 작성하라. Date 클래스를 정의해서 이용하라. 입출력 예: 환영합니다! 학과명, 학번, 이름, 생년월일(yyyy/mm/dd)을 입력하세요> 소프트웨어학과, 1111222333, 홍길동, 2000/03/01 >> 소프트웨어학과 1111222333 홍길동님 2000년3월1일생 2020년3월16일 현재 20세입니다. ** 프로그램을 수행할 때의 현재 날짜를 출력해야하며, 본인의 학번과 이름은 정확히 기록해야함(출석 및 과제 제출 확인용). 생일은 임의로 작성 가능. Code // use class Date #include #include #include #include #include ..

[C++] 8958 OX퀴즈

string 배열 quiz 에 N개의 퀴즈 결과를 입력받고 저장한다. int 배열 score 도 생성해서, 각 퀴즈 결과의 총점을 계산 후 저장한다. 퀴즈 결과의 각 문제마다, O라면 countO 값 1 증가, X라면 countO = 0 으로 초기화. 다음 문제로 넘어가기 전에 매번 countO 값을 score 배열의 해당되는 원소에 더해준다. 마지막 문제까지 이 과정을 반복한다. 모든 퀴즈 결과에 대해서 위의 과정을 반복한다. score 배열을 출력한다. #include #include using namespace std; void Score(string* quiz, int N) { int* score = new int[N]; for (int i = 0; i < N; i++) score[i] = 0; ..

Training/BOJ 2020.08.03
반응형