본문 바로가기

프로그래밍 언어/C, C++

(40)
[Hackerrank] 21. Vector-Sort 21. Vector-Sort [ 난이도: Easy | 분야: STL ] 1. 내용 정리 N개의 정수가 주어진다고 가정하자. N개의 정수들을 정렬하고 정렬한 순서대로 출력해라. N개의 정수들을 벡터에 저장해라. 벡터는 가변적인 크기를 가지는 배열이다. 정의 vector v; 비어있는 정수를 담을 수 있는 벡터를 생성한다. 크기 int size = v.size(); 벡터에 정수 넣기 v.push_back(x); x는 정수다. 이 이후에 벡터의 크기가 1 증가한다. 벡터의 마지막 값을 빼니기 v.pop_back(); 이 이후에 벡터의 크기가 1 줄어든다. 벡터 정렬 sort(v.begin(), v.end()); 벡터의 모든 값을 정렬한다. 2. 과제 입력 형식 첫 번째 줄은 정수의 개수를 표현하는 N을 포함하..
[Hackerrank] 20. Abstract Classes - Polymorphism 20. Abstract Classes - Polymorphism [ 난이도: Hard | 분야: Classes ] 1. 과제 과제 설명 C++에서의 추상 기저 클래스들은 오직 기저 클래스로만 사용된다. 그렇기에, 정의하지 않고도 가상 멤버를 허용한다. 캐시는 미래에 데이터를 요구할 때 데이터를 좀 더 빠르게 제공하기 위해 저장하는 공간이다. 캐시에 저장된 데이터는 더 빠른 연산을 가능하게 하거나 같은 데이터가 다른 곳에 저장되어 있다. cache hit는 필요한 데이터가 캐시에 있을 때를 의미하고 cache miss는 그렇지 않을 때를 의미한다. cache hit는 캐시에서 데이터를 읽은 뒤 제공하기 때문에 결과를 다시 연산하거나 느린 저장장치에서 읽어오는 것보다 빠르다. 그렇기에, 요청하는 데이터가 캐..
[Hackerrank] 19. Virtual Functions 19. Virtual Functions [ 난이도: Medium | 분야: Classes ] 1. 과제 이번 문제는 가상 함수에 익숙해지기 위해 준비했다. Person, Professor 그리고 Student, 세 개의 클래스를 생성하라. Person 클래스는 데이터 멤버로 name과 age를 갖는다. Professor 클래스와 Student 클래스는 Person 클래스로부터 상속을 받는다. Professor 클래스는 두 개의 정수 멤버를 갖는다: publications, cur_id 또한 두 개의 함수 멤버를 갖는다: getdata, putdata 함수 getdata는 사용자로부터 입력을 받는다: name, age 그리고 교수의 publications 함수 putdata는 name, age, profe..
[Hackerrank] 18. Exceptional Server 18. Exceptional Server [ 난이도: Medium | 분야: Classes ] 1. 과제 이번 과제에서는, 복잡한 계산을 하는 작은 연산 서버가 동작하는동안 발생하는 에러 메시지들을 다루어야 한다. 2개의 큰 숫자를 입력으로 받고 대수 연산 결과를 반환하는 함수가 있다. 안타깝게도, 연산하는동안 발생할 수 있는 다양한 에러들이 있다. 문제가 발생했을 때 적절한 에러 메시지를 출력할 수 있는 코드를 완성하라. 이 함수의 동작은 아래와 같다: - 만약 연산 함수가 주어진 인자들로 안정적으로 동작한다면, function call의 결과를 출력해라. - 만약 연산에 필요한 만큼의 메모리를 할당 받지 못한다면, Not enough memory.를 출력해라. - 만약 다른 표준 C++ 예외가 발생한..
[Hackerrank] 17. Inherited Code 17. Inherited Code [ 난이도: Medium | 분야: Classes ] 1. 과제 과제 설명 회사 웹사이트에서 사용자 이름을 사용할 수 있는지 확인하는 코드 조각을 상속하려고 한다. 이 함수는 잘 동작하지만, 사용자 이름이 너무 짧으면 예외(exception)를 발생한다. 코드를 분석하면서, 아무도 예외 처리를 하지 않았다는 것을 알게 되었다. 상속 코드는 에디터에서 잠금 영역에서 제공되어 있다. 예외 처리가 가능하도록 코드를 작성하고, 예외가 발생할 경우, Too short: n(n은 사용자가 입력한 사용자 이름의 길이이다.)을 출력하라. 입력 형식 첫 번째 줄은 테스트 케이스의 개수인 정수 t를 포함한다. 각 t개의 하위 시퀀스 줄들은 단일 사용자 이름 문자열, u로 테스트 케이스를 ..
[Hackerrank] 16. Box It! 16. Box It! [ 난이도: Easy | 분야: Classes ] 1. 과제 Box라는 클래스를 정의하라. 차원은 정수이고 class 내에서 private으로 정의되어 있다. 각 차원들은 레이블 되어 있다: 길이 l, breadth b, 그리고 높이 h. 클래스의 default constructordls l, b 그리고 h는 각 0으로 초기화되어 있다. 클래스의 파라미터화 constructor Box(int length, int breadth, int height)는 Box의 l, b 그리고 h(길이, breadth, 높이)를 초기화한다. copy constructor Box(Box B)는 B의 l, b 그리고 h를 그대로 복사하여 설정한다. 위의 조건을 따라서, class는 4개의 함수가 있다: ..
[Hackerrank] 15. Classes and Objects 15. 클래스와 객체 [ 난이도: Easy | 분야: Classes ] 1. 내용 정리 클래스는 객체의 청사진을 정의한다. 우리는 다른 기본적은 자료형의 변수를 정의하듯이 객체의 클래스를 정의하는데 동일한 구문을 사용한다. 예를 들어: Box box1;// Declares variable box1 of type Box Box box2;// Declares variable box2 of type Box 2. 과제 문제 정의 Kristen은 그녀의 고등학교에서의 졸업생 대표 경쟁자이다. 그녀는 얼마나 많은 학생들이 이번 학기에 5개의 과목에서 그녀보다 높은 점수를 받았는지 알고 싶다. 다음의 특징을 가지는 Student라는 클래스를 만들어라: - scores: 학생의 5개 과목의 점수를 가지고 있다. - v..
[Hackerrank] 14. Classes 14. 클래스 [ 난이도: Easy | 분야: Classes ] 1. 내용 정리 C++에서 클래스는 사용자 정의 타입으로 데이터와 함수들을 가지고 class라는 단어로 정의되는 것이다. 비록 클래스와 구조체가 기능적인 측면에서 동일한 자료형을 가지지만, 근본적인 차이가 있다. 클래스의 데이터 맴버들은 기본적으로 private이고 구조체의 데이터 맴버들은 기본적으로 public이다. common block에서 다중 데이터를 저장할 때, 데이터를 조작/접근하기 위해서는 특정한 함수(method라고 알려져 있다)가 필요하다. 이것은 객체지향 프로그래밍의 기반 블록(building block)처럼 제공된다. 구조체는 멤버 요소들의 접근을 제한하는 접근 구분자(access specifier) 또한 있다. 기본적으..
[Hackerrank] 13. Structs 13. 구조체 [ 난이도: Easy | 분야: Classes ] 1. 내용 정리 구조체는 복합적인 자료 구조를 표현하기 위해 여러 필드들을 혼합하는 방법 중 하나이고, 객체 지향 프로그램에서 기반한 것이다. 예를 들어, 우리는 구조체로 학생의 정보인 나이(정수), 이름(문자열), 성씨(문자열) 그리고 standard(정수)를 저장할 수 있다. 구조체는 다음과 같이 표현할 수 있다: struct NewType { type1 value1; type2 value2; . . . typeN valueN; }; 2. 과제 우리는 학생 이름, 위에서 말한 데이터들을 저장할 구조체를 만들어야 한다. 입력 형식 입력은 네 줄로 구성되어 있다. 첫 번째 줄은 나이 정보를 나타내는 정수를 저장하고 있다. 두 번째 줄은 학생..
[Hackerrank] 11. Strings 11. 문자열 [ 난이도: Easy | 분야: Strings ] 1. 내용 정리 C++은 문자열을 손대기 위해 좀 더 좋은 방향으로의 대안책을 제공하고 이 자료형을 간단하게 string이라고 한다. 이 자료형에서 널리 사용하는 특징들은 아래와 같다: 선언 string a = "abc"; 사이즈 int len = a.size(); 두 문자열 연결하기 string a = "abc"; string b = "def"; string c = a + b; // c = "abcdef". i-개 요소 접근하기 string s = "abc"; char c0 = s[0]; // c0='a' char c1 = s[1]; // c1='b' char c2 = s[2]; // c2='c' s[0] = 'z'; // s = "zbc..