2018년 11월 9일 금요일

C++ 디자인패턴 (Composite Pattern)

Composite Pattern
클라이언트에서 단일 객체와 복합 객체 모두 동일하게 다루기 위해 사용하는 디자인 패턴
#include <bits/stdc++.h>
using namespace std;
class Component {
public:
    Component() {}
    virtual ~Component() {}
    virtual void print(int= 0;
};
class Directory : public Component{
public:
    ~Directory() {}
    Directory() {}
    Directory(string id) :m_id(id) {}
    void add(Component *input) {
        m_comp.push_back(input);
    }
    void print(int tap = 0) {
        for (int i = 0; i < tap; i++printf("\t");    // tap
        printf("directory : %s\n", m_id.c_str());
        
        for (auto dir : m_comp) {
            dir->print(tap + 1);
        }
    }
 
private:
    vector<Component*> m_comp;
    string m_id;
};
class File :public Component {
public:
    ~File() {}
    File() {}
    File(string id) :m_id(id) {}
    void print(int tap = 0) {
        for (int i = 0; i < tap; i++printf("\t");    // tap
        printf("file : %s\n", m_id.c_str());
    }
private:
    string m_id;
};
int main() {
    Directory *dir_engineering = new Directory("Engineering");
    Directory *dir_computer_science = new Directory("Computer Science");
    Directory *dir_algorithm = new Directory("Algorithm");
    Directory *dir_AI = new Directory("AI");
 
    dir_algorithm->add(new File("Binary Search"));
    dir_algorithm->add(new File("BFS"));
    dir_algorithm->add(new File("Dinic Algorithm"));
    dir_computer_science->add(dir_algorithm);
 
    dir_AI->add(new File("Reinforcement Learning"));
    dir_AI->add(new File("CNN"));
    dir_computer_science->add(dir_AI);
 
    dir_engineering->add(dir_computer_science);
    dir_engineering->print();
    return 0;
}
cs

[출력값]

composite 패턴은 파일 시스템을 예시로 들면 이해하기 쉽다.
directory는 file을 담는것 뿐만 아니라 directory 또한 담을 수 있는데 다형성을 이용해 관리해준다.

2018년 11월 5일 월요일

2018 ACM-ICPC Seoul Regional


2일에 ACM-ICPC 예비소집으로 참가를 했습니다.
세종대에서 진행을 했었는데 대학교 자체가 굉장히 이뻤습니다 ㅋㅋ.

등록을 하면서 티셔츠랑 이름표등을 받고 B홀로 입장을 했는데 많은 사람들이 와있었습니다. 



대회장소에 입장할때부터 대회가 실감이 났던거같습니다.
본선에는 이 장소에서 사진을 찍을 수 없기 때문에 사진을 호다닥 찍었습니다. 
예비소집이 끝나고 나서는 팀원들과 저녁을 먹으러 갔습니다.
하남돼지는 고기를 직원이 직접 구워주기도 해서 편하게 집어먹었습니다. 
가격은 학생이 가기엔 좀 부담스럽긴 한것같습니다




본 대회는 3일 10:05분에 카운트 다운과 함께 대회가 시작되었습니다.
앞에서부터 쭈욱 쉬운문제를 찾고있었는데 D번문제가 표와 테케만으로 
단순한 구현문제임을 알아차렸습니다.
바로 구현을 시작했는데 조건을 하나 안쳐서 한번 틀렸습니다 ㅠㅠ..

그리고 대회시작한지 2시간가량은 깨작 깨작밖에 못한것 같습니다.
저희팀만 그런것이 아니고 스코어보드로도 그런 정황을 느꼈는데 그 때 K번을 접하게되었습니다.
K번을 보고 "그 알고리즘"을 사용할 수 있겠구나 하고 불꽃코딩을 했습니다.
근데 어디서 무한루프가 발생해서 디버깅을 한참동안 하는 고생을 했는데
컴파일러를 g++로 하고 auto 키워드를 사용해서 발생한 문제였습니다 ㅠㅠ...
수정하고 제출해서 바로 맞췄는데 남은시간은 약 2시간....

남은 시간동안에 A번과 F번을 시도해봤는데 두 마리 토끼를 잡다가 둘다 못잡은것 같습니다.
많은 팀들이 L번을 풀었고 저희팀은 시도를 그렇게 하지 않았는데 좀 아쉬웠던것 같습니다.




등수를 먼저 알려주는 노잼 시상식을 보고 팀원+지인들과 밥을 먹었습니다.
이전부터 출장뷔페가 맛이없다는 소문을 들었었는데 너무 맛있었던것 같습니다
결과는 좀 아쉽지만 문제도 좋았던것 같고 많은 지인들과도 만날 수 있었던 재밌는 경험이였습니다.
처음이자 마지막 ICPC라는게 너무 아쉽긴 합니다 ㅠㅠ





+기념품
맘에 듭니다 ㅎㅎ