보안의 3대 요소

컴퓨터 정보 보안에 대해서 진지하게 공부하기로 마음 먹었다면 꼭 알고 있어야 할 개념이 있습니다. 바로 정보보안의 세 가지 목표입니다. 개념은 어렵지 않으니 차근차근 읽어보면 이해하실 수 있을 겁니다.

기밀성(Confidentiality) 김일성아닙니다.

기밀성이라하면 통신하는 당사자만이 아는 비밀을 말하는데 정보보안에서는 이것을 기밀이라고 합니다. 정보보안에서 가장 많이 요구하는 조건이 바로 기밀이 보장되는 기밀성입니다. 군대나 은행, 산업체의 조직에서 기밀성이 필수적으로 요구되며 정보의 보관뿐만 아니라 정보의 전송에도 적용됩니다. 기밀성을 지키기 위해서는 데이터를 다른 사람들이 이해하지 못하도록 암호화하는 방법이 있습니다.

보안에서 기밀성을 위협하는 공격은 무엇이 있을까요? 간단하게 생각하면 남의 말을 엿듣는거나 훔치는 것이라고 생각하시면 이해하기 쉽습니다. 간단하게 몇 가지 알아보도록 해보지요.

- 스누핑(Snoofing)

스누핑은 비인가된 사용자가 중요 데이터에 접근하는 것이나 탈취를 의미합니다. 예를 들면, 인터넷으로 전성되는 파일이 기밀정보를 담고 있는데, 나쁜 노무 자식이 그 정보를 가로채고 자신의 이익을 위해 사용할 수 있지요.

- 트래픽 분석(Traffic Analysis)

데이터를 이해할 수 없더라도 공격자가 온라인 상에 전송되는 트래픽을 분석함으로써 다른 정보를 얻을 수 있습니다. 예를 들면, 공격자는 송수신자의 ip, 또는 이메일 주소, 또는 전송 성향을 추측하는데 도움이 되는 질의, 응답을 수집할 수 있습니다.

무결성(Integrity)

변경이 허락된 사람에게서 인가된 메카니즘을 통해서만 이뤄져야하는 것을 의미합니다. 정보는 시시각각 변화되는데, 이것이 인정된, 인가된 사람만 변경하는 것을 보장해야합니다. 허가되지 않은 사람이 변경했을때 이를 즉각 알 수 있어야합니다. 무결성을 위협하는 공격은 변경(Modification), 가장(Masquerading), 재연(Replaying), 부인(Repudiation)이 있습니다.

- 변경(Modification)

공격자는 정보를 가로채서 자신에게 이익이 될 수 있게 조작하는 것을 의미합니다. 원래는 송신자에게 줘야할 데이터를 중간에 공격자가 가로채서 자신의 주소로 바꾸거나 하는 것이 있습니다.

 

 

- 가장(Masquerading)

공격자가 인가된 사용자인척 하는 것을 의미합니다. 정보보안에서 스푸핑(Spoofing)이라는 공격 기법이 있는데요. IP나 MAC을 인가된 시스템의 주소로 변경하여 인가된 자인 척 정보를 획득합니다.

- 재연(Replaying)

재연이라는 것은 우선 공격자가 정보를 가로채고 난 이후 나중에 그 정보를 다시 사용함을 의미합니다. 즉, 공격자가 우선 전송된 데이터를 가지고 있다가 자신이 필요할 타이밍에 그 정보를 다시 보내는 것이죠. 예를 들어, 어떤 사람이 공격자에게 송금하라고 하는 데이터를 공격자가 가지고 있는데, 이 정보를 계속 이용해서 그 사람의 계좌에서 계속 돈을 공격자에게 보내는 공격이 있습니다. 그래서 재연이라는 공격을 막기위해 OTP(One-Time Password)를 사용합니다.

- 부인(Repudiation)

현실에서는 구라라고 하죠. 정보보안에서 부인이라함은 정보를 전송하거나 변경했을때 그 사실을 인정하지 않는 것을 말합니다. 현실에서 나중에 거짓말하지 못하도록 서명이나 도장을 찍듯, 정보보안에서도 디지털화된 서명(Digital Signature)이 적용됩니다.

가용성(Availability)

가용성은 정보가 사용가능해야한다는 것입니다. 중요한 정보를 사용하지 못 할 경우 심각한 피해를 입을 수 있으므로 정보에 대한 접근이나 사용이 인가된 자에 의해서 사용이 가능해야합니다. 가용성을 위협하는 공격은 아예 그 시스템을 마비시키는 서비스 거부 공격(DoS)이 있습니다. 한번쯤 어디선가 들어보셨죠?

- 서비스 거부(Denial of Service)

서비스 거부 공격은 가용성을 무너뜨리는 가장 일반적인 형태의 공격입니다. 이 공격을 통해서 서비스를 느리게 만들거나 아예 시스템을 마비시키는 공격입니다. 여러분은 이미 경험해본적이 많을 텐데요. 수강 신청 기간에 웹 페이지가 마비되는 현상을 경험해본적 있으시죠? 이런 현상은 공격이라고 보기는 어렵지만 시스템을 이렇게 만드는 것이 DoS 공격입니다. 여러분도 만들 수 있는데요. 무한 루프를 꾸준히 생성하는 프로세스를 만들 수도 있지요.

 

보안 서비스(Security Services)

ITU-T에서는 이러한 보안의 세 가지 목표를 달성하기 위해서 정보 보안에서는 5가지 서비스를 정의하게 됩니다.

 

 

 

데이터 기밀성(Data Confidentiality)

데이터 기밀성은 공격자가 데이터를 볼 수 없게 보호합니다. 스누핑과 트래픽 분석 공격을 막기 위해서 고안되었습니다. 간단하게 남들이 보지 못하게 만드는 것으로 수 많은 암호화 알고리즘을 사용하여 달성할 수 있습니다. 암호화에는 크게 대칭 암호, 비대칭 암호 알고리즘이 존재하지요. 데이터 기밀성은 스누핑(Snoofing)과 트래픽 분석 (Traffic Anaysis)을 막을 수 있습니다.

데이터 무결성(Data Integrity)

데이터의 무결성은 앞서 말한 변경, 삽입, 삭제, 재연 등으로부터 정보를 보호하는 것으로 메시지의 일부 또는 전체를 보호합니다. 예를 들면 암호학적 해시 함수를 통해서 데이터의 해시값을 만들어 전송하고 수신받는 사람은 전송받은 데이터를 기반으로 해시값을 생성하여 비교해보는 방법이 있습니다. 간단하게 암호학적 해시라함은 데이터를 암호학적 해시함수를 통해서 1:1 대응되는 다른 데이터로 만드는 암호학적 기법입니다. 이러한 암호학적 해시는 여러 해시 알고리즘이 존재합니다.

인증(Authentication)

그 사람이 인가된, 허가된 사람이 맞는지, 또는 데이터가 원하는 데이터가 맞는지확인하는 메커니즘을 사용합니다. 연결 지향(Connection-Oriented) 통신에서 연결이 되었을때 송신자 또는 수신자에 인증이 필요할 수 있습니다. 또는 비연결 지향(Connectionless) 통신에서는 그 데이터의 출처를 인증이 필요할 수 있습니다.

부인봉쇄(Nonrepudiation)

데이터의 송신자가 전송한 데이터가 맞다는 사실, 또는 수신자가 데이터를 수신했다는 사실을 거부할 수 없게 만드는 정보 보안 서비스입니다.

예를 들어, 만약 서버에서 이상한 IP주소로 공격이 발생했을때 시스템에 남아있는 로그를 통해서 그 IP에서 공격 사실을 부인봉쇄할 수 있습니다. 그러니 서버에서는 공격 탐지와 사실을 확인하기 위해 다양한 로그를 남깁니다.

접근제어(Access Control)

비인가된 접근을 제어하여 데이터를 보호하는 보안 서비스를 말합니다. 예를 들어 리눅스 시스템에서 파일의 주인은 데이터를 쓰고(Write) 읽고(Read) 실행(Execute)할 수 있고, 같은 그룹 사용자는 파일을 읽고 실행하는 권한만 있으며, 그 외의 사람은 읽기만 할 수 있습니다

 

 

.

반응형
블로그 이미지

REAKWON

와나진짜

,

 

 

뱀 섬 (퀘이마다 그란데 섬)

퀘이마다 그란데 섬은 브라질 상파울루 해안가에서 33km 떨어진 섬입니다. 여의도의 약 2배의 크기를 가진 이 섬은 사람이 살지 않는 무인도인데요. 사람이 살 수도 없는 섬이기도 합니다.

왜 들어갈 수 없을까요?

 

이 섬의 주인은 뱀이기 때문인데요. 그것도 무시무시한 독사가 무려 4000마리 이상이 서식하고 있기 때문입니다. 

그냥 독사가 아니라 지구 최강의 독을 자랑하는 독사들이 우글우글대고 있는 섬입니다.

1 제곱미터당 3~5마리의 뱀이 있다고 보시면 됩니다. 한걸음 한걸음 뱀 밭이죠.

 

이 독사들 중에서 보스가 골든 랜스 헤드 바이퍼라는 뱀입니다. 생긴거 진짜 무섭게 생긴것도 같고 멋있게 생긴것도 같네요. 얘한테 물리면 끝났다고 보시면 됩니다. 빠르게 퍼지는 맹독은 위출혈, 신장 부전, 뇌출혈을 일으켜 사망이 이르게 합니다.

 

왜 뱀만 살까?

이 뱀은 지상에 있는 뱀보다 무려 5배 이상이나 강한 독을 지녔다고 하며 물리면 사망입니다. 왜 이섬은 뱀만 득실거리는 섬이 되었을까요?

 

두 가지의 가설이 존재하는데요. 

1) 첫번째는 해적들이 보물을 이 섬에 숨겨놓고 훔쳐가지 못하도록 뱀을 풀어놨다는 것입니다. 실제 포루투칼의 정복자 알레이소가 잉카의 보물을 찾아 떠났는데요. 값 비싼 보물들을 가져오다가 상파울루 인근 섬에 숨겼다고 하는 이야기가 있습니다.

잠깐 드는 생각이 어차피 보물 숨겨놓고 너도 나도 못들어가게 할려면 독사를 왜 풀어놓은건지 의문이네요. 혹시 다른 입구가 존재하는 것일까요?

 

2) 또 다른 가설은 원래 이섬은 육지였다고 하고, 해수면이 상승하여 육지와 분리된 섬이 되었다고 하는 가설이 있습니다. 강한 맹독을 지는 이유도 이 섬이 육지와 분리되어 먹을 것이 떨어지자 새를 잡아먹기 위해서 단시간에 독을 빠르게 퍼지게 진화했다고 합니다.

아직은 정확히 밝혀지지 않은 것 같습니다.

 

실제 이 섬은 1985년 브라질 당국에 의해 출입 제한 구역이 되었고, 몇몇 의학적 연구와 관련된 조사만 허용한다고 합니다. 그리고 출입시에 엄벌에 처한다고 하지요. 그럼에도 불구하고 실제로 들어가서 시체로 돌아오는 경우가 많다고 하는데요. 그 이유는 이 뱀의 가격 때문이죠. 이 뱀은 퀘이마다 그란데 섬에서만 존재하며 황금색을 띄기 때문에 무척이나 비싼 값에 거래가 된다고 합니다.

한 마리당 무려 3800만원!

이 정도면 위험을 감수하고서라도 이 섬에서 밤을 잡을만 한가요?

 

섬에만 안들어가면 되고 섬 주위에 배를 타고 관광하는 것은 허용이 된다고 합니다. 유튜브에 보면 아예 수영하는 사람도 있더군요.

 

여기 유튜브 영상도 같이 보시면 좋을 것 같습니다.

 

 

 

 

반응형
블로그 이미지

REAKWON

와나진짜

,

 

 

해싱(Hashing)

해싱(Hashing)은 데이터를 관리하는 고급 기법으로 검색(search), 삽입(insert), 삭제(delete)를 단시간(O(1))에 할 수 있게 만들어주는 기법입니다.

예를 들면, 리스트에서 단어를 찾는 시간이 O(n)시간이 걸리고, 이진 트리의 경우 O(nlogn)이 걸리죠. 그런데 우리는 이것을 해싱이란 기법을 사용하여 O(1)만에 해결할 수 있습니다. 진짜 죠낸 빠르네요.

해싱은 산술적 연산을 이용해서 구현해야합니다. 이런 해싱은 크게 두 가지 종류가 있는데요. 하나는 정적 해싱(static hasing)이고 다른 하나는 동적 해싱(dynamic hasing)입니다. 이번 포스팅은 정적 해싱에 대한 이야기를 합니다.

 

정적 해싱(Static Hashing)

정적 해싱이라는 기법은 고정 크기의 버킷을 갖는 해시 테이블(담을 그릇)에 데이터를 담는 것을 말합니다.

해시 테이블(Hash Table)

설명 전에 해시 테이블(Hash Table)에 관해서 알고 가야합니다. 해시 테이블은 키(Key)값(Value)으로 구성되어 있는 데이터가 저장된 테이블이라고 보시면 됩니다. 해시 테이블은 행과 열로 구성되어 있다고 생각하세요. 여기서 두 가지 용어가 있는데 버킷(bucket)슬롯(slot)입니다.

 

버킷(bucket) : 버킷은 해시 테이블의 행 인덱스(주소)라고 입니다. 

슬롯(slot) : 슬롯은 그 행을 열의 인덱스(주소)라고 생각하시면 됩니다.

 

아래의 그림은 버킷이 11, 슬롯이 3인 해시 테이블입니다. 여기서 data가 전부 차있는 버킷도 존재하고 그렇지 않은 곳도 존재합니다. bucket[0]을 보시면 이미 데이터가 가득차있네요. 다음 들어올 데이터가 bucket[0]에 들어갈 데이터라면 어떻게 될까요? 넣을 수 없는 상황이 되겠죠? 

그것을 우리는 오버플로(Overflow)라고 하며 이 문제를 해결해야합니다. 잠시후 설명하도록 하겠습니다.

 

 

쳐넣는거는 알겠는데 어떻게 넣냐구요? 해시 함수를 이용해서 넣을 수 있습니다.

 

해시 함수(Hash Function)

해시 함수는 h()라 하고 찾을 키를 k라고 한다면 해시 함수는 h(k)라 표현합니다. 해시 함수는 k를 이용해서 해시 테이블에 매핑(mapping)하는 역할을 하게 됩니다. 즉, 데이터를 집어넣을 장소(주소)를 정합니다. 좋은 해시 함수는 계산이 쉬워야하고, 출돌을 최소화 시켜야합니다. 그리고 모든 버킷에  데이터가 고르게 분포되어야합니다. 앞서말한 오버플로를 최소화하기 위함이죠. 해시 함수에는 어떤 것들이 있을까요?

 

참고로 아래의 해시함수들은 모두 키가 양의 정수를 갖는데, 만약 키를 문자나 문자열로 쓰고 싶다면 문자(열)을 정수로 변환시키는 작업이 필요합니다.

1) Division

나눗셈을 이용하는 해시 함수입니다. 모듈러 연산(나머지를 구하는 연산으로 % 아시죠?)을 이용하여 집어 넣을 곳을 정합니다. 키들은 음수이면 안된다는 가정이 있습니다.

 

h(k) = k % D

 

해시 테이블은 적어도 D개의 버킷을 가지고 있어야합니다. k가 15이고 D가 7이라면 h(15) = 15 % 7 = 1 이 됩니다.

 

2) Mid-Square

키를 제곱하여 버킷을 정하는 건데요. 키를 제곱한 후 중간에 몇 비트를 선택하여 버킷의 주소를 구합니다. r비트를 선택하면 해시 함수 결과로 나올 수 있는 값의 범위는 0 ~ (2^r) -1이 되겠죠?

r을 3로 정해보고,  key값을 121으로 정해서 계산해보면 121^2 = 14,641인데 이것의 가운데 3개를 가져오면 h(121) = 464가 됩니다.

 

 

 

3) Folding

폴딩은 키를 몇몇 부분(Part)로 나눈후 그 값을 더하여 해시 함수의 결과를 도출합니다. 방식에 따라 두가지가 있는데요. 그냥 부분을 일정하게 나눈 후 더하는 방식인 시프트 폴딩(Shift Folding)과 부분의 경계를 뒤집어서 계산하는 경계폴딩(Boundary Folding)이 있습니다.

 

1. 시프트 폴딩(Shift Folding)

k가 12345678910일때 3개의 10진수로 나눈다면 h(12345678910) = 123 + 456 + 789 + 10이 되고 더하게 되면 1378이 되므로 h(12345678910) = 1,378 입니다.

 

 

2. 경계 폴딩(Boundary Folding)

k가 아까와 같이 12345678910이고 3개의 10진수로 나눈다면 h(12345678910) = 123 + 654 + 789 + 01이며 결과는 1,567입니다. 456과 10이 뒤집혀진 것을 알 수 있네요.

 

 

4) Digit Analysis

이 방식은 이미 모든 키들을 알고 있는 정적 파일에 유용한 방법으로 각 키의 주소를 결정할 때 많이 나오는 수는 제외하고 적게 나오는 키의 수만 선택됩니다. 

예를 하나 들어보겠습니다. 키가 5개가 미리 정해져있다고 칩시다. 각 키는 0112311, 0234522, 0167811, 0291022, 0111222 에서 숫자 3개를 선택해서 해시 함수의 결과를 꺼내면 hash(0112311) = 123, hash(0234522) = 345, hash(0167811) = 678, hash(0291022)= 910, hash(0111222) = 112 가 됩니다. 01 11 02 22는 많이 겹치는 수이기 때문에 고르지 않습니다.

이름에서 알 수 있듯이 키의 숫자들을 분석을 해야하는데요. 분석하려면 미리 결정된 데이터들이 있어야합니다. 즉, 키가 미리 결정되어져 있어야한다는 의미입니다. 그러니까 왜 정적 파일에 유용한지 이해가 가시죠?

 

오버플로 핸들링(Overflow Handling)

앞서 오버플로에 대해서 이야기했었죠? 오버플로를 해결하기 위해서는 두 가지 핸들링 기법이 있는데, 개방 주소법(Open Address)체이닝(Chaining) 방식이 있습니다.

 

1) 개방 주소(Open Address)

오버플로가 발생했을때 공간이 남는 버킷에 집어 넣는 것으로 공간이 남는 버킷 어느 곳이나 있으면 넣는 다고 하여 개방 주소라고 합니다. 남는 곳을 어떻게 구햐냐에 따라 4 가지 방식이 존재합니다.

 

1. 선형 탐사(Linear Probing)

선형 탐사만 알아도 나머지 probing방식은 이해할 수 있습니다. 고정된 폭을 정해서 그 폭만큼 버킷의 주소를 이동해서 남는 공간이 있는지 확인 후에 있으면 집어넣는 방식입니다. 그래도 남는 공간이 없다면 다시 그 폭만큼 버킷의 주소를 이동하죠. 만약 해시 테이블의 공간이 모자란다면 해시 테이블의 크기를 증가시키는데, 전부 찰때 증가시키는 것이 아니고 75% 정도 채워지면 해시 테이블의 크기를 증가시킵니다.

 

만약 폭을 i라고 하고 버킷의 크기를 b라고 한다면 해시 테이블은 (h(k) + i ) % b 의 식으로 계산됩니다.

 

 

 

2. 제곱 탐사(Quadratic Probing)

감 오시죠? 폭을 제곱하여 오버플로를 핸들링합니다. (h(k) + (i^2)) %b 로 계산됩니다. 만약 오버플로가 발생하면 i=1로 한칸 이동하여 찾고 그래도 실패하면 그 다음은 i=2가 되어 4칸을 이동하고, 그 다음은 i=3이 되어 9칸을 이동하여 검사하는 방식입니다.

 

아래 그림은 선형 탐사와 제곱 탐사를 비교한 그림입니다.

3. 무작위 탐사(Qandom Probing)

감 오시죠? 랜덤한 값을 폭으로 두고 계산합니다.

 

4. 이중 해시(Double Hashing)

해싱한 값을 한 번 더 해싱하는 방식입니다. 다른 방식보다 연산하는 시간이 걸립니다. 해시 연산을 한 번 더 하기 때문이죠.

 

2) 체이닝(Chaining)

체이닝은 이름과 같이 체인같이 연결하여 오버플로를 막는 방법인데요. 연결 리스트(Linked List) 배우셨죠? 각 버킷이 연결 리스트가 되고 원소가 계속 추가 될 수 있습니다.

아래는 체이닝 기법을 적용한 버킷이 6개있는 해시 테이블입니다.

이때 삽입할때 연결리스트의 앞에 삽입합니다. 이유는 매번 끝에 원소를 삽입하면 연결리스트에 끝까지 도달해야되기 때문에 삽입 시간이 오래 걸리기 때문입니다.

 

 

개방주소법이나 체이닝 방식이나 최악의 경우(Worst Case) 성공할때까지 검색하는 시간은 O(n)의 시간이 걸릴 수 있습니다. 하지만 균형잡힌 검색 트리(Balanced Search Tree)를 이용하면 이 시간은 O(logn)까지 줄일 수 있습니다.

 

다음 포스팅은 동적 해싱에 대한 이야기를 하도록 하겠습니다.

 

 

 

반응형
블로그 이미지

REAKWON

와나진짜

,

 

 

쿨다라(Kuldhara)

쿨다라(Kuldhara)는 인도 라자스탄의 자이살메르 지구에 한 마을입니다. 단순 그냥 버려진 마을은 아니고 저주가 걸려있다는 소문이 자자한 그런 마을입니다. 

원래는 1200년대부터 사람이 살다가 1800년대에 버려진 마을입니다.

버려진 이유에 대해서는 두 가지 이야기가 있는데요. 지역에 나도는 소문에 의하면 이렇습니다. 원래 이전에 Paliwal Brahmins라는 그래도 잘 사는 사람들이 거주했다고 합니다. 그러던 중 살림 싱(Samlim Singh)이라는 마을의 지배자가 있었나봐요. 그 인간이 마을 족장의 딸을 사랑했는데요. 아버지가 그 딸을 내어주지 않겠다고 거절했습니다.

 

원래 살림 싱이라는 사람자체가 평이 안좋게 나있었고 방탕하고 문란했다고 하죠. 살림 싱은 자신의 제안을 거절하자 마을 주민을 괴롭히기로 하는데요. 세금 등을 무자비하게 거둬들이는 등의 박해로 사람들을 못살게 굴거라고 협박했습니다. 마치 누군가가 생각이 나는 순간이네요. 우리나라도 그렇게 대처하는 사람있잖아요 문으로 시작하는

 

마을 사람들은 족장의 딸과 본인 자신들을 위해서 마을을 떠나기로 하였고 그날 새벽 마을을 떠나게 됩니다. 그러면서 마을에 저주를 걸었다고 하죠. 하지만 그 날, 마을 사람들이 떠나는 모습을 본 사람이 아무도 없고, 어디로 갔는지도 모른다고 합니다.

 

또 다른 이유가 있는데요. 2017년 연구에 따르면 지진에 의해서도 마을이 파괴되었다고 합니다. 어떤 이유가 되었건 현재는 버려진 마을이 되었습니다.

 

실제 조사된 초자연 현상

2010년에 Indian Paranormal Society의 한 팀이 이곳에 귀신이 있는지 알아내려고 12시간 동안 머물러있었는데요. 그들이 경험한 초자연 현상을 대충 이렇습니다.

 

- 누군가가 어깨를 두드렸는데 아무도 없는 경험(너무 흔하네요.)

- 귀신들이 자신의 이름을 밝힌 경험

- 특정 구역에 온도차가 심하게 나는 이상 현상

- 움직이지 않는 그림자

 

그밖에도 많겠죠? 심령 체험을 위해 사람들이 방문을 하는 경우가 많은데요.

 

실제 낮에가면 사람들도 있어서 무섭지는 않는 곳이지만 밤에 가면 분위기가 다릅니다. 아래의 사진의 하얀 소복을 입은 마귀같은 것은 실제 영상으로 돌아다닙니다. 그러나 아직 발업이 안됐는지 거동이 불편해보입니다.

 

아래는 kuldhara에 대한 설명과 실제 kuldhara를 밤에 돌아다니는 영상입니다. 위의 거동이 불편한 할머니도 나오십니다. 주작일수도 있지만 리얼하기는 하네요.

 

 

 

만약 여러분이 인도 자이살메르에 여행을 가게 된다면 쿨다라를 한번 가보는 것은 어떨까요? 워낙 유명해져서 정부는 아예 이곳을 관광 지역으로 개발하기로 합니다. 그래서 제한구역이 아니라서 밤,낮 가리지 않고 들어가도 되는 것으로 알고 있는데요. 한 번 가서 초자연 현상을 경험하는 것도 좋은 추억이 될 것 같습니다. 전 안갑니다.

 

 

반응형
블로그 이미지

REAKWON

와나진짜

,

www.acmicpc.net/problem/2839

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net

 

 

 

문제 설명

설탕 3kg, 5kg 봉지가 있는데 특정 kg수를 봉지를 최대한 적게 사용하여 만드려고 할때 가장 적게 쓰는 봉지의 수를 구하는 문제입니다.

18kg를 3kg봉지와 5kg봉지를 사용하여 채우려면 3kg짜리 6개를 써서 18kg를 만들 수도 있습니다.

하지만 5kg 짜리 3개와 3kg짜리 1개를 사용하여 만들면 총 4개의 설탕봉지를 사용합니다. 그러니까 4가 답이되는 것입니다.

3kg와 5kg만 사용하므로 만들 수 없는 수도 존재합니다. 그럴때는 -1을 출력하는 문제입니다.

 

입력은 채우는 설탕의 kg수 N이 주어지고 N의 범위는 3이상 5000이하(3<= N <=5000)입니다.

 

몇가지 입력에 대한 출력을 먼저 보고 문제를 풀어보시고 풀이를 봐주세요.

 

INPUT OUTPUT
19 5
20 4
91 19
4999 1001
7 -1

 

풀이1 - DP

두가지 풀이가 있습니다. 전형적인 DP방식의 풀이와 그리디한 방식으로 푸는 방법이지요. 첫번째 풀이는 DP를 사용한 풀이입니다.

 

만약 현재 i kg를 달성하려면 이 전에 계산한 (i-3)kg와 (i-5)kg 중 작은 것에 1을 더하면 현재 i kg을 채울 수 있는 최소의 봉지수가 나오겠네요.

dp[i] = min(dp[i-3] + 1, dp[i-5] +1)

 

그런데 만들 수 없는 수는 0이겠죠? 예를 들면 4는 절대로 3과 5를 조합하여 만들 수가 없는데요.  그러면 항상 0이 최소의 수가 되니까 조건을 달아야합니다.

만약 dp[i-3]에 0보다 큰 값이 있을때, dp[i-5]일때 0보다 큰 값이 있을때 만 계산하게 만드는 것입니다.

 

코드는 아래와 같습니다.

#include <iostream>
using namespace std;
int dp[5001]; //global 변수이기때문에 0으로 초기화된 배열

int main() {
	int n;
	cin >> n;
	//3kg와 5kg를 만드는 가장 최소의 봉지수는 1
	//따라서 dp[3]과 dp[5]는 무조건 1
	dp[3] = dp[5] = 1;	

	//3과 5 다음인 6부터 for loop 순회
	for (int i = 6; i <= n; i++) {
		if (dp[i - 3]) dp[i] = dp[i - 3] + 1;

		//이미 dp[i-3]에 값이 존재할때 dp[i]가 업데이트 됐었을 수 있다.
		//만약 dp[i]에 값이 없다면 dp[i] = dp[i-5] +1 로 업데이트
		if (dp[i - 5]) dp[i] = dp[i] ? min(dp[i] , dp[i - 5] + 1) : dp[i - 5] + 1;
	}
	cout << (dp[n] == 0 ? -1 : dp[n]) << endl;
	return 0;
}

 

먼저 dp라는 배열을 0으로 셋팅해놓고 (전역변수이기 때문에 저절로 0으로 초기화됩니다.) dp[3] = dp[5]를 1로 만든 후에 앞서 설명한 것을 for문 안에 구현하면 됩니다.

 

풀이2 - Greedy

설탕이 25kg가 있다면 5kg로만 계속 사용하여 채우면 됩니다. 그러면 5개 봉지만 사용하면 되겠네요. 그렇다면 우리가 kg을 사용할 일이 굳이 있을까요? 우리가 5kg으로 모두 채울 수 있다는 것을 미리 알면 오히려 3kg를 사용하면 불리하다는 것을 알 수 있습니다. 그렇다면 5kg으로 나눠진다는 것만 알면 되지 않을까요? 이때 mod연산 %연산이 사용됩니다. %5 연산을 하여 0이 되지 않는다면 3kg를 봉지를 사용해야겠죠. 

그리고 난 후 다시 5kg로 나눠 떨어지는지 확인합니다. 만약 나눠떨어지면 나눈 몫만큼의 5kg봉지가 사용되고 프로그램을 바로 종료시키면 되는 아이디어입니다.

전체 C++ 소스코드는 아래와 같습니다.

#include <iostream>

using namespace std;

int N;
int main() {
	cin >> N;
	int ans = 0;
	while (N>=0) {
		if (N % 5 == 0) {	//가장 큰 수로 나누는게 가장 작은수랑 섞어서 나누는 것보다 유리
			ans += (N / 5);	//나눈 몫을 더한 것이 정답
			cout << ans << endl;
			return 0;
		}
		N -= 3;	//3kg을 빼고 
		ans++;	//가방 하나 늘어남
	}
	cout << -1 << endl;
}

 

두가지 방식의 풀이를 알아보았는데 저도 얼핏 dp만 생각하고 있었는데 다른 사람의 해답을 보니 이러한 방법이 있다는 것을 알았습니다. 역시 저빼고 다른 사람들은 똑똑한것 같습니다.

 

반응형
블로그 이미지

REAKWON

와나진짜

,

 

 

적성검사가 끝나고 2주후에 적성 검사 결과가 나온다. 적성검사 개판쳤던것에 비해 의외로 합격하니 의아했다.

LG전자 면접은 1, 2차로 나뉘는데 1 면접 전에 lg사이트에 TO-DO 것이 생긴다.

5 정도로 PPT 주제에 맞게 채워야 하는데, 번째 주제는 본인이 가장 좋아하는 전공을 5 정도로 기재하고 좋아하는지를 설명한다. 번째 주제는 장은 진행했던 프로젝트, 마지막 주제는 자신을 어필하는 주제였다.

 

이것을 ppt 준비하여 기간내에 제출하여야 한다. ppt 디자인에는 살짝만 신경쓰고 나머지는 내용에 치중하도록 하는 것이 좋을 같다. 그리고 ppt 대한 장수는 중요하지 않다. 나는 5장만 채우지 않고 썼다.

 

면접 장소와 면접 가는

같은 경우 오후 1 정도에 면접이었는데 면접 장소는 마곡 LG사이언스 파크 이다.

지하철이 급행 9호선을 타고 가야 한다. 일반 열차를 타고 가면 급행 열차를 보내기 위해 가양역에 한참 머물러있기 때문에 예상했던 것보다 시간이 걸린다.

일반 열차를 타고 가면 신논현에서 마곡나루역까지 40분이 걸린다. 그래서 지각할뻔했다. 급행은 25분정도면 도착한다.

 

면접 보기 코딩

도착하게 되면 인사팀 직원이 보안 문열고 들여보내준다. 면접을 지하 1층에서 보게 되는데 면접을 보기 전에 코딩 문제를 풀게 되는데 그렇게 어렵진 않은 수준으로 C언어를 배웠다면 있는 정도이다.

시간은 40 정도이고 대략 10문제 정도이다. 시간이 되면 인사팀 직원이 종이를 가져간다.

 

면접 복장

LG전자에서 면접 복장으로 자유로운 복장으로 착용하라고 하였는데, 주변 면접자들을 보니까 죄다 정장이었다. 물론 나도 정장입고 가는 것이 마음이 편했다.

정장을 입은 비율은 10 8명으로 정장이라고 보면 된다.

 

PT면접

이제 면접장으로 가면 나에 경우에는 면접관 2명이 앉아있었고 자리에는 노트북이 놓여있었다. 면접관의 경우 프로젝트 리더 한명, HR 사람 한명이 있었다. 면접관의 경우에는 자신에게 관심있는 면접관이 들어온다고 하고, 다른 면접자들에게 물어보니 어던 사람은 4명이 있었다고 한다. 노트북 화면에는 내가 준비했던 ppt 켜져있었다. 이제 ppt 앉아서 발표하면 된다.

 

중간에 영어로 자기소개하라고 하는데, 준비해온 자기 소개 영어를 하면 되는데, 중간에 면접관이 끊었다.

 

그리고 중간에 내가 손코딩 문제로 주제가 넘어갔다. 손코딩 면에서는 칭찬을 받았다. 불길했다.

 

마지막으로 면접이 끝나고 면접관이 내게 악수를 요청하면서 이런 말을 남겼다.

"행운을 빌어요"

불길했다.

 

PT면접에서 면접관은 2명이고 면접자는 1명이며 면접은 30분이 넘게 진행되었다

 

면접 분위기

면접 분위기는 전혀 딱딱하지 않다. PT 발표도 면접관이 성의있게 들어주었다. 그리고 심지에 내가 대답을 못하니 면접관 자신이 웃으면서 설명해주기도 했다.

다른 면접자의 말도 들어보니 압박하는 면접은 없었다. 면접을 편한 분위기 속에서 진행되니 안심해도 같다.

 

면접이 끝나면 아까 인사팀 직원이 보안 게이트까지 데려다준다. 내쫓는다. 상태로 다시 집으로 가면 된다. 면접비는 그날 주는 것이 아니라 1~2 계좌로 입금이 된다.

 

 

반응형
블로그 이미지

REAKWON

와나진짜

,

 

 

면접장까지 가는 길

코딩 테스트가 끝난 2~3주가 지나게 되면 면접을 보게 된다.

이전에는 코딩 테스트에서 만점을 받으면 가산점이 있다고 했지만 2018 내가 면접을 당시에는 그런 가산점 같은게 없다고 했다. 실제로 가산점이 있는지 없는지도 모르지만, 있으면 좋겠다고 생각했다.

냐면 맞았다고 생각했기 때문이다.

워낙에 회사다보니까 면접 날짜가 직무마다 다르고 최대 2주간에 걸쳐 모든 사람의 면접이 끝난다. 나같은 경우 삼성 SW DS쪽으로 지원하였고, 거의 마지막에 걸려있었으니 면접을 준비하는데에는 충분한 시간이다. 결국은 나가리

 

나는 2018년에 면접을 봤는데 새벽 6 30분까지 양재역으로 총집합을 한다.  사실 6 30분인지 확실하지는 않으나 엄청 일찍 가야하는 것은 맞다.

버스는 큰 버스로 5대 정도로 가는데 도착하는 순간 담배를 못핀다. 안그래도 면접이 하루에 3개를 몰아서 하는 면접이라 체력과 정신력이 중요하다. 버스 타기 전에 5대 정도 줄담배로 니코틴 충전하도록 하자.

 

도착하면 건물 안에서 이름표를 나눠주고 짐을 둔다. 그리고 조를 편성한다. 이제 밖으로 나갈 없다.

면접은 3개의 면접을 보는데, 순서는 사람마다 로테이션을 돌기 때문에 어떤 면접을 먼저 보는지는 없다.

 

 

같은 경우에는 번째 창의력 면접, 번째 인성면접, 번째 직무면접이었다.

창의 면접

창의력 면접에서는 용지를 나눠주고 컴퓨터 앞에 앉아 화면에 주어진 문제에 대해서 50 동안 아이디어를 생각해 컴퓨터에 쓰고 용지에도 아이디어를 써야한다. 그리고 아이디어를 가지고 면접관과 소통하며 발표한다. 약간 면접이라기 보다는 아이디어를 통해서 면접관하고 이야기하는 것으로 나머지 면접 보다는 분위기가 가볍다. 문제를 공개할 수는 없지만 키워드로는 대기 오염이었다.

면접관은 3명이고 면접자 1명이다.

 

인성면접

인성 면접 전에는 인성검사를 시작하는데 빨리 빨리 끝내야한다. 인성 면접 보기전에 면접실 앞에서 대기하는데 이때가 금단 현상과 함께 긴장이 극도로 심해져 사타구니에 땀이 찬다. 많은 사람들이 인성 면접이 가장 중요하다고 하는데 바로 최종 보스(높으신 분들,임원)들이 면접을 보기 때문이다. 다른 면접관들은 현직에 종사하는 사람이 면접관으로 나오는데 아무리 사람들이 점수를 좋게줘도 임원들이 거르면 면접 탈락이라는 소문이 많이 나돌았다. 면접관들은 인자한 척을 하면서 긴장을 풀어준다. 하지만 그런게 무서웠다. 한번 잘못하니 숨소리가 강풍이다. 면접 시간은 10~15 정도로 면접 시간이 끝나면 밖에서 직원이 시간이 되었다고 문을 두드린다.

같은 경우에 존경하는 인물이 "앨런 튜링"인지 물어보았다.

많은 면접 질문에 대비했다고 생각했지만 존경하는 인물을 물어볼지는 몰랐다. 왜냐면 구라쳤기 때문이다.

가장 어이도 없고 생각치도 못한 질문은 "앨런 튜링이 어떤 업적 가지를 말해보세요"

당연히 모른다. 그냥 이미테이션 게임에 주인공이라는 것밖에 모른다.

면접관은 3명이고 면접자는 1명이다.

 

 

그렇게 멘탈이 개박살나면서 나는 오전에 면접 2개를 마쳤다. 오후가 되면 이제 밥을 먹는데 역시 삼성전자 밥은 너무나도 맛있다. 오후 2~3시정도가 되면 이제 가져온 서류와 면접비를 받게 된다.

 

직무 면접

직무 면접 같은 경우에는 현직에 있는 사람이 면접관이다. 문제는 공개할 없으나 대략적인 키워드는 반도체, 정렬 알고리즘, 보안 정도이다. 3 정도의 문제가 주어지는데 문제를 A4용지에 풀고 들어가서 면접관 앞에서 발표하면 된다. 문제풀이시간은 대략 40 정도이다.

의외로 면접관과 나의 거리가 되게 좁고 심지어 나는 인사하다가 넘어질뻔했다.

그리고 앞에는 칠판이 있는데 풀어온 것을 설명할 칠판에 그림이나 글을 써서 설명할 있다. 나는 신나게 설명하다가 보드마카를 들고 나와버렸다.

보드마카는 놓고 오도록 하자.

직무면접의 면접관은 4명이고 면접자는 1명이다.

 

이제 면접이 끝나면 5 정도가 되는데 그대로 양재역에 내려준다. 맨탈이 박살 상태에서 양재역에서 집으로 버스타고 가면 된다.

 

면접 결과는 2주후에 발표하고 떨어졌다.

 

 

 

반응형
블로그 이미지

REAKWON

와나진짜

,

 

 

 

 

 

 

빌드 자동화 툴 Cmake에 관한 설명과 사용법을 알아보도록 하겠습니다.

 

Cmake 사용하는 이유

Cmake는 Makefile을 만들어주는 툴입니다.

Cmake 설명하기 전에 Makefile 무엇이냐면 빌드를 편리하게 해주는 일종의 빌드 스크립트라고 보시면 됩니다. 스크립트를 make명령을 사용해서 실행시키기는 겁니다.

그냥 shell파일을 이용해서 빌드를 있겠지만 Makefile 사용하는 이유는 Incremental build 방식을 사용하기 때문입니다.

 

Incremental build?

프로젝트의 규모가 커질수록 수많은 소스 파일들이 생겨날테고,  빌드하는 시간도 오래걸리게 됩니다. 우리가 대학교에서 프로젝트하는 수준은 그냥 강아지 애교 수준이고 정말 회사에서 일하게 경우에는 빌드하는 것도 시간이 걸립니다.

그래서 우선 처음에는 모두 빌드를 해놓고, 이후 수정된 파일에 대해서는 소스파일과 연관된 것들만 빌드하여 시간을 줄여주는 빌드 방식이라고 생각하시면 됩니다.

 

이러한 편리성이 존재하지만 Make 의존성에 관한 기술을 일일이 기재해야 되기 때문에 관리측면에서 번거롭습니다.

Cmake 이런 귀찮은 점을 해결해주는 툴로서 Makefile 생성해내는 역할을 합니다.

 

 

간단하게 Cmake 사용하는 방법을 알아보도록 하겠습니다.

a.c

int add(int a,int b){

    return a+b;

}

 

a.h

int add(int,int);

 

b.c

#include <stdio.h>

#include "a.h"



int main(){

    printf("%d+%d=%d\n",5,6,add(5,6));

    return 0;

}

 

 

a.c add라는 함수가 존재하고 단지 수를 더해서 결과를 return하는 함수입니다.

a.h a.c 함수를 선언한 헤더파일이고 b.c a.h 함수를 사용하는 실제 프로그램입니다.

간단한 프로그램을 빌드하는 CMakeLists.txt 작성은 줄이면 됩니다.

 

 

 

 

 

 

CMakeLists.txt

 

ADD_EXECUTABLE(a.out a.c b.c)

 

ADD_EXECUTABLE 실행할 파일을 생성하는 명령으로 번째 기재할 내용은 실행파일 이름이고 나머지는 실행파일을 생성하기 위한 source파일입니다.

 

 

이제 아래의 명령을 통해서 실행해보도록 합시다.

cmake CMakeLists.txt

 


#cmake CMakeLists.txt

-- The C compiler identification is GNU 5.5.0

-- The CXX compiler identification is GNU 5.5.0

-- Check for working C compiler: /usr/bin/cc

-- Check for working C compiler: /usr/bin/cc -- works

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

-- Detecting C compile features

-- Detecting C compile features - done

-- Check for working CXX compiler: /usr/bin/c++

-- Check for working CXX compiler: /usr/bin/c++ -- works

-- Detecting CXX compiler ABI info

-- Detecting CXX compiler ABI info - done

-- Detecting CXX compile features

-- Detecting CXX compile features - done

-- Configuring done

-- Generating done

# ls

a.c  a.h  a.out  b.c  CMakeCache.txt  CMakeFiles  cmake_install.cmake  CMakeLists.txt  Makefile

 

그러면 소스파일 외에도 Cmake 관련된 파일이 생성되는데, Makefile 추가로 포함되었음을 있습니다.

만약 cmake 없었다면 Makefile 내용은 여러분들이 작성했어야하겠죠?

Cmake 이용하면 간단하게 줄이면 되니까 무척이나 편리합니다.

 

이제 실제 make 실행하면 우리가 만들어내고 싶은 a.out이라는 실행파일이 만들어집니다.


# make

[ 33%] Building C object CMakeFiles/a.out.dir/a.c.o

[ 66%] Building C object CMakeFiles/a.out.dir/b.c.o

[100%] Linking C executable a.out

[100%] Built target a.out

# ls

a.c  a.h  a.out  b.c  CMakeCache.txt  CMakeFiles  cmake_install.cmake  CMakeLists.txt  Makefile

# ./a.out

5+6=11

 

Cmake 변수 선언도 가능하며 다양한 명령어가 존재합니다. 이런 명령어들은 , 소문자를 구분하지 않지만 보편적으로 대문자를 사용합니다.

 

 

 

 

CMAKE_MINIMUM_REQUIRED()

Cmake빌드를 실행할 최소 버전을 명시합니다. 보통 위에 사용하며 기재된 버전보다 낮다면 오류를 보여주고 빌드를 종료합니다.

사용법은 아래와 같습니다.

CMAKE_MINIMUM_REQUIRED( VERSION 3.4.3 )

SET() 변수 정의

SET명령어는 변수를 정의하며 다음과 같이 사용됩니다.

SET(변수명 )

어렵지 않죠? 뿐만 아니라 List형식으로도 변수를 정의할 수도 있습니다.

SET(변수명 1 2 3)

이렇게 정의된 변수는 $변수, 혹는 "{}" 써서 ${변수} 사용할 있습니다.

앞의 CMakeLists.txt 변수를 통해 바꿔본다면 이렇게 바꿀 있습니다.

 

SET(SRC_FILES a.c b.c)

SET(BIN_NAME a.out)

ADD_EXECUTABLE(${BIN_NAME} ${SRC_FILES})

 

PROJECT() 프로젝트명 정의

PROJECT(프로젝트 )으로 쓰이게 되고 프로젝트의 이름을 정해주는 명령어로 CMAKE_PROJECT_NAME이라는 변수에 저장이 됩니다.

 

 

MESSAGE() 메시지 출력

혹시 변수에 들어있는 값이라던가 오류 메시지를 표시하려면 MESSAGE라는 명령어를 사용하여 출력하면 됩니다.

MESSAGE( TYPE MESSAGE)

메시지 종류는 생략가능하며 5가지의 종류가 있습니다. STATUS 가장 심각도가 약한 단계이고 FATAL_ERROR 심각도가 가장 심합니다.

 

TYPE 설명
STATUS 상태 메시지 출력, 계속 진행
WARNING 경고 메시지를 출력, 계속 진행
AUTHOR_WARNING 프로젝트 개발자용 경고 메시지를 출력, 계속 진행
SEND_ERROR 오류 메시지를 출력, 계속 진행, Makefile생성하지 않음
FATAL_ERROR 오류 메시지를 출력, 작업 중단

 

 

ADD_LIBRARY()

ADD_LIBRARY 실행파일이 아닌 library파일을 생성할 쓰이는 명령입니다. 아래와 같이 쓰이게 되죠.

ADD_LIBRARY( library이름 TYPE 파일1 파일2 …)

처음에는 라이브러리 이름이 쓰이고 두번째는 라이브러리의 종류를 나타냅니다. Default STATIC 쓰이며 아래와 같이 3개의 종류 하나를 지정할 있습니다.

STATIC, SHARED, MODULE

그리고 후에는 사용될 파일을 나열하면 됩니다.

 

위의 CMakeLists.txt 수정하여 소스파일 a 공유 라이브러리를 만든다면 아래와 같이 수정하시면 됩니다.

 

SET(SRC_FILES a.c)

SET(LIB_NAME a)

ADD_LIBRARY(${LIB_NAME} SHARED ${SRC_FILES})

 

후에 빌드하면 lib(라이브러리 이름).so 파일이 생기는 것을 확인할 있습니다

ADD_DEFINITIONS()

전처리시에 정의할 매크로를 의미합니다. 앞에 -D 쓰고 나서 매크로명을 써야하며 #define 구문의 역할을 한다고 보시면 됩니다. 2가지 사용법이 있습니다. 컴파일시에 -D매크로명 옵션과 같습니다.

ADD_DEFINITIONS(-D매크로명) : 단순 define으로 매크로를 정의할때 사용합니다.

ADD_DEFINITIONS(-D매크로명=) : 매크로에 값을 집어넣습니다.

 

INCLUDE_DIRECTORIES()

#include에서 사용할 디렉토리를 명시합니다. 만약 inc 디렉토리에 헤더파일이 존재하는 경우 아래와 같이 사용하면 됩니다.

INCLUDE_DIRECTORIES(inc)

 

이상 간단하게 CMake의 개념과 사용법을 알아보았습니다. 다음에는 더 심도있게 알아보도록 하겠습니다.

 

 

 

 

 

 

반응형
블로그 이미지

REAKWON

와나진짜

,

 

 

북센티넬 섬(North Sentinel Island)

인도양 동부 벵골만 열도에 있는 안다만 섬 중 하나로 북 센티넬 섬인데요.

겉으로 봐서는 무인도 같지만 사람이 살고 있는 섬입니다. 사람이 살고 있기는 한데, 절대 친절하지 않은 사람들이 살고 있어요. 그러니까 아무것도 모르고 들어갔다가는 이미 거기 살고 있는 형님들한테 화살맞고 죽을 수 있죠.

이곳에 살고 있는 센티넬 족이라 불리는 원주민들이 살고 있습니다.

 

셀티넬 족은 6만 년이 넘도록 외부와 철저히 단절되어 있습니다. 그리고 외부인을 보면 먼저 죽이려고 듭니다. 그러니 뭣 모르고 섬에 들어갔다가는 ㅈ될수 있다는 겁니다. 그리고 앞으로 해외여행 리스트에서 북센티넬 섬은 지우도록 하세요.

 

 

적대적인 이유

센티넬 족은 왜 이렇게 우리에게 적대적일까요? 처음부터 그랬던 걸까요?

원래 먼저 선빵쳤던 건 외부인이었습니다. 원래 맞은 사람은 상처로 남고 때린 사람은 기억 못하잖아요? 저도 저 때렸던 사람 다 기억하거든요

예로부터 외부로부터 약탈을 당해왔습니다. 그리고 인도가 영국의 식민지배를 당할 때 영국군의 무력 시위도 있었습니다. 특히 결정적인 것은 외부 한 탐험대가 노인 한쌍과 아이 4명, 총 6명을 납치하였습니다. 노인 2명은 면역력이 떨어져 사망했고 아이 4명은 돌려보냈다고 하네요.

그런 사건들이 있는데 외부인을 환영할 리가 없죠. 저같아도 제가 안죽으려면 활들고 먼저 쏩니다.

 

공격 사례

1974년 센티넬족을 다룬 다큐멘터리도 네셔널 지오그래픽에서 방영했었는데 센티넬 족들은 환영할리 없죠. 괜히 들어갔다가 부상을 입게 됩니다. 그래도 부상만으로 끝나서 다행인 정도인거에요. 

괜히 불법으로 고기잡다가 술 먹고 배가 좌초되어서 죽은 사람들도 있으니까요. 실제 좌초된 배는 구글어스에 찍혀있습니다.

구글어스에 North Sentinel Island를 검색해서 그 배를 찾아보세요. 저는 찾았습니다.

 

접근 포기

2004년 남아시아 대지진이 발생했을 때 이 섬도 역시 큰 피해를 입었을 것이라는 추측으로 헬기를 보냈는데요. 물론 구호물자도 실어서 헬기를 보냈는데요. 묻지도 따지지도 않고 한결같이 그들은 화살로 대응하였고 삔또 상한 정부는 그냥 알아서 복구하라고 냅뒀습니다.

마음의 상처가 컸던 탓일까요? 2005년 센티넬족과는 손절할 것이라는 발표를 하고 주위에 들어갈 수 없게 만들어버립니다. 

 

사실 현대식 무기로 충분히 제압은 가능하지만 국제적으로 용납될 수 없고 인도적이지 않습니다. 그래도 나라가 인도인데

 

그밖에...

미 선교사 살해사건도 유명한 사건인데요. 괜히 종교 전파하러 갔다가 싸늘한 주검이 됩니다. 그들이 항상 외부인에게 공격적이지 만은 않았습니다. 인도의 조사단이 처음으로 그들과 교류하게 됩니다.

보다 자세한 내용은 아래 영상을 시청해주세요.

 

센티넬 섬 영상

 

 

 

 

 

 

반응형
블로그 이미지

REAKWON

와나진짜

,