본문 바로가기

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

(40)
[Hackerrank] 40. Overload Operators 40. Overload Operators [ 난이도: Easy | 분야: Other Concepts ] 1. 과제 과제 설명 Complex라는 클래스가 다음과 같이 주어져 있다: class Complex { public: int a,b; }; 연산자들은 특별한 이름의 정규 함수인 operator function으로 오버로드 되어 있다. 이 함수의 이름은 오버로드된 연산자 기호 뒤에 파라미터를 붙이는 것으로 정의된다. 구문은 다음과 같다: type operator sign (parameters) { /* ... body ... */ } Complex 클래스에서는 + 연산자와
[Hackerrank] 39. Operator Overloading 39. Operator Overloading 1. 내용 정리 클래스는 C++에서 새로운 타입을 정의한다. C++에서의 타입은 constructions와 assignments와 호환되는 것이 아닌 연산자에서도 가능하다. 예를 들어: int a=2, b=1, c; c = b+a; c의 값은 3일 것이다. 비슷하게, 클래스에서 또한 연산자 오버로딩을 통해 연산 기능을 수행할 수 있다. 연산자는 특별한 이름의 정규 함수인 연산자 함수에 의해 오버로드 된다. 이들 이름은 오버로딩된 연산자 기호를 따라 연산자 키워드로 시작된다. 양식은 다음과 같다: type operator sign (parameters) { /*... body ...*/ } 2. 과제 main() 함수에는 두 개의 행렬를 만드는 입력이 있고 이들..
[Hackerrank] 12. Attribute Parser 12. Attribute Parser 1. 내용 정리 이번 챌린지는 custom-designed markup language인 HRML을 사용한다. HRML에서는 각 요소들은 시작 태그와 종료 태그로 둘러싸여 있고 각 태그를 포함하도록 되어있다. 오직 시작 태그만의 attribute를 가질 수 있다. 틸다 '~'라고 하는 래퍼렌싱 태그를 사용함으로써 attribute를 부를 수 있다. 태그는 중첩될 수도 있다. 시작 태그는 아래의 형식을 따른다: 종료 태그는 아래의 형식을 따른다: attribute는 아래처럼 사용한다: tag1~value tag1.tag2~name 2. 과제 과제 설명 HRML 형식으로 작성된 주어진 소스코드는 N 줄을 포함하고 Q 쿼리들을 답한다. 각 쿼리는 특정된 attribute ..
[Hackerrank] 38. Preprocessor Solution 38. Preprocessor Solution [ 난이도: Easy | 분야: Other Concepts ] 1. 내용 정리 Preprocessor directive는 해쉬 문자(#)로 코드 안에서 구분되어 있는 줄이다. 이 줄들은 preprocessor를 지시한다. preprocessor는 코드의 컴파일 시작 전에 실행되고 어느 코드든 regular statement에 의해 실제로 생성되기 이전에 모든 directive들을 제공한다. #define INF 10000000 if(val == INF) { // Do something } After the preprocessor has replaced the directives, the code will be if(val == 10000000) { // He..
[Hackerrank] 37. C++ Class Templates 37. C++ Class Templates [ 난이도: Easy | 분야: Other Concepts ] 1. 내용 정리 클래스 탬플릿은 파라미터에 기반한 클래스를 생성하는 특징을 가지고 있다. 클래스 탬플릿은 컨테이너를 구현하는데 사용된다. 클래스 탬플릿은 탬플릿 인자로서 제공된 set을 인스턴스화한다. 아래의 MyTemplate 예시는 어느 타입이던 하나의 요소를 저장할 수 있고 주어진 값을 2로 나누는 divideBy2라는 함수를 하나 가지고 있다. template class MyTemplate { T element; public: MyTemplate (T arg) {element=arg;} T divideBy2 () {return element/2;} }; 특정 타입에 대한 탬플릿을 다르게 구현할..
[Hackerrank] 36. Magic Spells 36. Magic Spells [ 난이도: Hard | 분야: Inheritance ] 1. 과제 과제 설명 비디오 게임을 하는 동안, 매우 강력한 암흑의 마법사와 싸워야 한다. 그가 거리를 두며 마법을 영창하는동안, 오직 수 초만이 반응하도록 시간이 주어지고 역영창을 해야 한다. 역영창이 효과가 있기 위해서는 상대방이 어떤 영창을 하는지 알아야 한다. 마법사는 그의 마법을 영창하기 위해 스크롤을 사용하고 가끔씩 그의 스테미나에 저장되어 있는 일반 영창을 사용한다. 이 경우, 영창에서 스크롤의 이름을 추출해야 한다. 그 다음 이 새 영창이 영창 저널의 공식과 얼마나 비슷한지 알아야 한다. 에디터의 잠겨있는 코드의 내용을 분석하고 counterspell 함수를 완성하라. 이 챌린지를 해결하기 위해 Dyna..
[Hackerrank] 35. Accessing Inherited Functions 35. Accessing Inherited Functions [ 난이도: Medium | 분야: Inheritance] 1. 과제 문제에서 클래스 A, B 그리고 C가 주어진다. 모든 세 클래스는 그들만의 함수를 가지고 있다. 클래스 A에는 받아온 파라미터에 2를 곱한다. class A { public: A(){ callA = 0; } private: int callA; void inc(){ callA++; } protected: void func(int & a) { a = a * 2; inc(); } public: int getA(){ return callA; } }; 클래스 B에는 받아온 파라미터에 3을 곱한다. class B { public: B(){ callB = 0; } private: int ..
[Hackerrank] 34. Messages Order 34. Messages Order [ 난이도: Medium | 분야: Debugging ] 1. 과제 실생활 어플리케이션과 시스템에서, 흔히 사용하는 것 중 하나가 메시지이다. 아이디어는 전송하는 자가 메시지를 수신자에게 보내는 것이다. 메시지는 네트워크를 통해 전달된다. 하지만, 몇몇 네트워크 프로토콜은 보낸 메시지의 순서를 보존하는 것을 보장하지 않는다. 예를 들어, 어떤 사람이 hello, hi 와 what's up이라는 메시지를 보낼 때, 그들은 순서대로 what's up, hello, hi를 받을 것이다. 많은 시스템에서 예상되는 행동은 순서를 보존하여 송수신한 메시지의 순서를 일치하게 하는 것이다. 이 문제에서는, 해야할 것은 임의의 순서대로 메시지를 보내고 있는 네트워크 프로토콜의 최상층보다..
[Hackerrank] 33. Overloading Ostream Operator 33. Overloading Ostream Operator [ 난이도: Medium | 분야: Debugging ] 1. 과제 이번 챌린지에서 해야할 것은
[Hackerrank] 32. Multi Level Inheritance 32. Multi Level Inheritance [ 난이도: Easy | 분야: Inheritance ] 이번 챌린지에서는 Inheritance-Introduction의 연장선에 있는 챌린지다. 이 문제를 풀기 전에 반드시 이전 챌린지를 풀고 오는 것을 추천한다. 이전 문제에서, 상속에 대해 배웠고 base 클래스의 멤버 함수들을 derived class에서 사용하는지에 대해 배웠다. 이번 챌린지에서는, 다중 상속에 대해 배울 것이다. 클래스 A라는 base 클래스가 있고 클래스 A를 derive한 클래스 B와 클래스 B를 derive한 클래스 C가 있다고 가정하자. 우리는 클래스 C의 객체를 만든다면, 클래스 A와 클래스 B의 멤버를 사용할 수 있다. 그렇기에 이 메커니즘을 다중 상속이라고 한다.(B..