본문 바로가기

프로그래밍 언어

(60)
[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] 10. Nested Lists 10. Nested Lists [ 난이도: Easy | 분야: Basic Data Types ] 1. 과제 반의 N명 학생들의 각각의 이름과 성적이 주어지고 이를 nested list에 저장한 후 성적이 두 번째로 낮은 학생의 이름을 출력하라. 주의: 성적이 두 번째로 낮은 학생이 여러 명이라면 알파벳 순으로 이름을 정렬한 후 각각 별도의 줄에 이름을 출력하라. 예시 records = [["chi",20.0],["beta",50.0],["alpha",50.0]] 성적을 순서대로 나열하면 [20.0, 50.0]이어서, 두 번째로 낮은 성적은 50.0이다. 이 경우, 해당하는 학생이 두 명이 있고 이를 리스트로 표현하면 다음과 같다: ["beta", "alpha"] 알파벳 순으로 정렬한 다음 출력하면 다음과..
[Hackerrank] 09. Find the Runner-Up Score! 09. Find the Runner-Up Score! [ 난이도: Easy | 분야: Basic Data Types ] 1. 과제 설명 대학 스포츠 데이에서 참가자들의 점수 시트가 주어질 때 runner-up score를 찾아야 한다. 시트에는 n개의 점수들이 있다. 리스트에 이 데이터를 저장하고 runner-up 데이터를 찾아라! 입력 형식 첫 번째 줄은 정수 n을 포함하고 있다. 두 번째 줄은 n개의 정수를 정수를 가진 배열 A[]를 표현하고 있다. 각 요소들은 공백으로 구분되어 있다. 제약 사항 n은 2보다 크거나 같고 10보다 작거나 같다. A[i]는 -100보다 크거나 같고 100보다 작거나 같다. 출력 형식 runner-up score를 출력하라. 입력 예시0 5 2 3 6 6 5 출력 예시0..
[Hackerrank] 08. List Comprehensions 08. List Comprehensions [ 난이도: Easy | 분야: Basic Data Types ] 1. 과제 과제 설명 리스트 비교에 대해 배워보자! 입력으로 정수 x, y 그리고 z가 주어지고 차원을 나타내는 정수인 n과 함께 제공된다. i+j+k가 n과 같지 않도록 하는 3차원 좌표 (i,j,k)를 출력해라. 여기서 i는 0보다 크거나 같고 x보다 작거나 같고, j는 0보다 크거나 같고 y보다 작거나 같고 k는 0보다 크거나 같고 z보다 작거나 같다. 공부를 위해 다중 루프를 사용하는 대신 List Comprehension을 사용하라. 예시 x = 1 y = 1 z = 2 n = 3 가능한 [i,j,k]는: [[0,0,0],[0,0,1],[0,0,2],[0,1,0],[0,1,1],[0,1,..
[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를 받을 것이다. 많은 시스템에서 예상되는 행동은 순서를 보존하여 송수신한 메시지의 순서를 일치하게 하는 것이다. 이 문제에서는, 해야할 것은 임의의 순서대로 메시지를 보내고 있는 네트워크 프로토콜의 최상층보다..