글쓴이 보관물: litcoder

MBE academy의 먹튀와 경찰서에서의 시간낭비

다니던 영어학원에서 추석을 앞두고 학원을 이전한다는 안내가 있었다. 하지만 이상하게도 이사가는 위치는 알려주지 않았는데 원어민 선생님들도 위치는 모른다고 했다. 이때 눈치를 챘어야 하는 건데… 막상 추석 연휴 후에는 11월 부터 시작하겠다는 문자가 왔다.

쓸데없는 디테일과 정중함은 사기의 기본. 이 때까지도 이전 장소에 대한 안내는 없었다.

11월이 되서 수업 예약을 하려고 연락을 했더니  연락이 되지 않아서 혹시나 하고 학윈에 가봤더니 기자재는 모두 빠지고 붙어있는 연락처는 전화를 받지 않는다. 아뿔싸!

이번엔 홈페이지에 나와있는 사업자 등록번호로 국세청에조회 해보니 10월 30일자로 폐업신고 되어있었다. 응?

이쯤 되면 인정하자. 당했다.

국민신문고에 민원을 넣으니 남부교육청으로 배당되고 며칠후 연락이 왔다. 담당자의 이야기는 이 학원에 대한 여러 민원이 있었고, 현재는 영등포 경찰서 경제팀에서 이 내용을 이미 수사하고 있으니, 연락해 보라며 연락처를 주고 올린 민원을 취하해 달라고 했다.

영등포 경찰서에 연락을 했더니 결제한 카드 영수증을 가지고 방문해 달라고 한다. 책상 서랍에서 찾아낸 영수증과 함께 돈을 지불할 때 작성했던 계약서를 가지고 상담실로 가서 내용을 설명했더니 근무 하시던 분이 한참 어디론가 전화를 한다.

형사: “이게전산에안뜨는데.. .. .. .. 그럼별건으로간다고요?”

‘별건으로 간다’는 건 아마도 사안이 중요하지 않다고 판단해서 각 사건을 별도로 판단하겠다는 의미 인 듯 싶었다. 중요한 건이라고 생각했으면 하나의 증거라도 더 모으려고 하지 않았을까. 통화가 끝난 후에는 기나긴 상황 설명과 별로 중요하지 않은 질문/답변이 이어졌다. 했던 얘기를 또 묻고 또 묻던 형사 아저씨가 계약서의 날짜를 보더니 눈을 반짝이며 묻는다.

형사: “선생님이거계약하신날짜가작년 5월이네요?”
: “..”
형사: “그리고시월까지는수업받으신거고.”
: “..”
형사: “그럼이건사기로못넣어요계약을할시점에의도가있었어야하는데이경우는수업을진행했잖아요.”
: “아뇨사기로고소하고싶진않고요남은수업료만돌려받으면돼요.”
형사: “그럼여기가아니라소액심판으로가셔야지..”
: “저더러영수증갖고여기로오라면서요..”
형사: “아니그래서지금이렇게알려드리는거잖아요.”

‘귀찮은거 한건 해결’ 분위기가 물씬 풍기는 형사 아저씨의 기새등등한 반전공격에 혹시나 싶어 소액심판 청구를 알아보니 약 9만원 정도의 비용과 서류 작성하러 법원에 다니는데 추가로 시간이 소요될 것 같아서 그만 두었다. 학원 경영자가 잡혀서 받을수 있다는게 확실하다면 모를까 그냥 잃어버린셈 치자고… 잠시나마 20만원 정도 되찾을 수 있을거라고 기대했던 순진함을 질책했다.

모든게 끝나고 나서 든 생각인데.. 학원이 저렇게 문자를 보내서 인테리어 업체 어쩌네 하며 나를 안심시키고 나서 뒤로는 폐업신고 한것도 사기의도로 볼 수 없는 건가?

아직 서버 비용은 남아 있는 모양인지 MBE academy홈페이지는 계속 열려 있다. 중국어 강사인 것 마냥 오해 하게 끔 팝업창에서 광고당하는 James 선생님과 늘 반갑게 맞아 주던 작가 Rachel 선생님, 잡학다식 해서 모르는게 없던 Allen 선생님, 타국생활에 대해 친절히 조언해 주시던 Stephanie 선생님, 영어 가르쳐서 버는 돈으로 한국어를 열심히 배우던 Peter 선생님, 90% 확률로 재계약 할꺼라고 했지만 어느 순간부터 안 보이던 Grant 선생님들께 마지막 인사도 못하게 되어서 무척 아쉽다. 덕분에 많이 배우게 되어서 고맙다는 말은 꼭 하고 싶었는데… 폐업할 때 남은 임금이나마 잘 받으셨기를 바란다.

또한 어려운 환경에서도 학원 경영하느라 고생하셨던 Jimmy S. Han 선생님 너 이 개새끼 두고보자!

XPS13 베터리(Y9N00) 교체

2013년에 샀던 XPS13(L233X)가 윈도우즈 초기화 이후 “Your battery has experienced permanent failure and needs to be replaced. Strike the F1 key to continue. F2 to run setup the utility.” 메세지와 함께 부팅하지 않는 문제가 생겼다. 이 메세지는 매번 나오는 것은 아니고 어떤 때는 아무 메세지도 없이 부팅이 안되었기 때문에 실제로 베터리 문제인지 확신이 서지 않았다. 하지만 뒷판을 뜯어 베터리케이블을 빼고 AC로 연결했을 때 아무 문제 없이 부팅되는 것을 보고는 베터리에 점점 더 혐의가 가서 바꿔보기로 했다.

XPS13의 베터리인 Y9N00는 Dell 홈페이지에서 검색되지 않는다. 한국 Dell에 문의해 봤더니 재고가 있는지 확인하는데도 시간이 오래 걸릴것 같다는 대답이 돌아왔다. 결국 G마켓에서 파는 적당해 보이는 녀석으로 영입하기로 했는데, 며칠후에 도착한 새로운 선수는 딱 보기에도 허술해 보였다.

스티커에 Dell꺼라고 붙어는 있긴한데 마감도 엉망이고 인쇄 상태가 영 허술한 데다가 이전에 사용하던 정품 베터리와 비교해서 스티커 내용도 다르다. 이 베터리의 최악은 커넥터 부분인데 아래 사진에서 왼쪽의 각지게 만들어져 있는 정품과 달리 이 녀석은 어떤 초등학생이 하기 싫은 숙제 억지로 한것 마냥 구부려 놨다.

커넥터 각도가 저 모양이라 안끼워 질까 걱정했는데 좀 힘들긴 했지만 억지로 끼워서 연결할 수는 있었다.

뭐냐 이게…

뚜껑덮고 부팅했더니 우려와 다르게 부팅/충전 모두 잘되고 베터리 테스트 프로그램을 몇개 돌려도 별다른 이상은 발견되지 않았다. 다음은 유투브에 있는 XPS13  베터리 교체 교육영상.

Heap tree 만들기

Heap tree는 완전이진트리 형태로 모든 부모 노드의 값이 자식 노드 보다 크거나 (max heap) 모든 부모 노드의 값이 자식 노드 보다 작은 (min heap) tree를 말한다. 이 글에서는 max heap tree를 만드는 방법을 알아본다.

Heap tree를 생성하는 buildHeapTree()이 동작하는 절차는 다음과 같다. N은 원소의 갯수.

재귀로 구현된 heapify()가 등장하는데, 이 함수가 하는 역할은 주어진 node를 부모로 시작해서 단말 node로 내려가면서 max heap 조건에 맞도록 변경해 주는 역할을 한다. heapify()는 큰 자식과 부모를 swap() 하는 경우 재귀하므로 시간 복잡도는 O(트리높이)가 된다.

Heap tree를 생성하는 방법을 고민해 본 적이 있다면, 부모 node들을 순회 할 때 역순으로 순회하는게 얼마나 영리한 방법인지 무릎을 쳤을 것이다. 내 얘기다;;

 

예제

임의의 정렬되지 않은 배열 { 2, 7, 5, 4, 1, 6, 10, 3, 9, 8}을 예로들어 보자. 10개의 node를 가지는 tree를 배열로 구현 할 때, 부모 node들의 index는 소숫점_버림(N/2) – 1로 계산할 수 있다. 따라서 10개의 node를 가지는 이 tree의 부모 node들의 위치는 [0], [1], [2], [3], [4]이다. (C/C++로 구현 할때는 N/2한 값을 그냥 int형 변수에 넣으면 된다)

각 부모 node들과 자식 node들을 subtree라고 하면 이 예제는 다음과 같이 5개의 subtree들로 구분될 수 있다.

 

Heapify – Subtree A

부모인 4번째 index의 값과 하나 밖에 없는 자식인 9번째 index의 값을 비교한다. 자식의 값이 더 크므로 부모와 swap()한다.

 

Heapify – Subtree B

부모인 3번째 index와 왼쪽 자식인 7번째, 오른쪽 자식인 8번째를 비교해서 가장 큰 오른쪽 자식과 부모 node를 swap()한다.

 

Heapify – Subtree C

오른쪽 자식인 index 6번과 부모인 index 2번을 교체한다.

 

Heapify – Subtree D

1번 index의 왼쪽 자식이 더 크므로 부모와 swap()한다.

 

 

Heapify – Subtree E

2번 index의 값이 더 커서 부모인 0번 index와 swap()하고 보니 2번 index를 부모로 하는 subtree가 더이상 max heap이 아니게 된다.

그래서 다시 한번 heapify()를 호출해서 max heap을 만든다.

 

Code