본문 바로가기

전체 글

(125)
C++의 동적 바인딩 소프트웨어 공학수업을 들으면서 객체지향에 관해 이야기가 나오게 되었는데, 동적 바인딩이 무엇인가에 대한 질문을 받았다. 개념적인 의미로는 실행 시간에 메소드를 결정하여 실행시키는 것으로 알고 있는데 막상 예시를 들어 설명하려니 쉽사리 말로 나오지 않았다. 그래서 이 기회에 정리하면 좋겠다는 생각에 글을 써본다. 위의 내용대로 동적바인딩의 의미는 알았다. 반대되는 성질로 정적바인딩도 있으며, 컴파일 단계에서 실행할 메소드를 결정하게 된다. 무슨말인지 예시를 통해 알아보자 class Animal { public: virtual void showInfo() = 0; //순수 가상함수, 반드시 재정의 } class Dog : public Animal { public: void showInfo(){ print("..
3190 뱀 www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 문제의 조건에 맞춰 구현하는 구현 문제이다. 어려운 부분은 없었지만, 실수하는 부분들이 있어 시간을 잡아먹었다. 먼저, 뱀의 이동과 비슷한 동작을 하는 자료구조인 덱(deque)을 사용하여 표현했는데, 앞, 뒤로 넣고 빼는게 비슷하다. 유의해야할 조건은 다음과 같다. 1. 다음 칸에 사과가 있다면, 덱을 push_front만 한다. 2. 다음 칸에 사과가 없다면, 덱을 push_front, pop_back한다. 이 때..
14890 경사로 www.acmicpc.net/problem/14890 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 단순한 구현 문제이지만, 확인해야할 조건들이 까다로운 문제이다. 조건 중에 특히 유의해야 할건 높이가 다른 칸인데, 다음 칸의 높이가 현재 칸보다 높은지 낮은지를 잘 구분해주어야 한다. 그렇지 않으면 확인하는 방향 기준 순방향, 역방향을 정할 수 없기 때문이다. 유의해야할 사항들은 다음과 같다. 1. 범위를 벗어나는 경사로를 설치하는 경우 2. 높이 차이가 1을 넘어가는 경사로를 설치하는 경우 3. 이미 설치한 경사로의 칸을 침범하여..