* 아래 글은 상상속에 만들어진 시나리오이며, 해답이 아닙니다.
나: "근처"라는 개념을 먼저 정의하겠습니다.
근처를 제가 살고 있는 위치를 기준으로, 걸어서 10분을 걸어서 이동할 수 있는 범위를 근처라고 정의하겠습니다. 괜찮나요?
면접관: 네 계속하세요.
나: 평균적으로 사람이 걸어서 100m를 1분만에 갈 수 있다고 가정하겠습니다.
그러면 10분만에 1km를 갈 수 있습니다.
그럼 10분만에 이동할 수 있는 범위는, 원의 너비 공식을 적용하여 1*1*pi 이므로 약 3km^2라고 가정하겠습니다.
즉, 제 근처는 제 위치기준으로 3km^2영역을 뜻합니다.
여기까지 어떠신가요?
면접관: 네 계속하세요.
나: 이제 타코집을 정의하겠습니다. 타코집은 일식관련 취급하는 모든 상가에서 판매한다고 가정하겠습니다.
전체 음식 관련 범주를 only한식, only양식, only중식, only일식, 종합으로 총 5가지로 나누되, 편의상 각각의 비율이 동일하다고 생각하겠습니다.
그러면 전체 음식을 취급하는 상가 중, 타코를 판매하는 상가는 40%입니다.
여기까지 어떠신가요?
면접관: 모두 동일하게 비율을 가져간것도 있고, 베트남/인도 음식 등 다양한 범주가 빠지긴했지만... 계속 진행해주세요.
나: 이제 음식을 취급하는 상가의 개수를 추정하겠습니다.
일단 1분만에 100m를 걸어갈 수 있을 때 도달할 수 있는 건물은 9개 입니다. 이것은 제 직감에 의존했습니다.
이 중에서 원룸, 고시원, 아파트 등 음식점이 없는 건물의 비율은 20%라고 가정하겠습니다. 이것도 제 직감에 의존했습니다.
그러면 제가 1분만에 도달할 수 있는 범위 0.1km*0.1km*pi = 0.0314km^2에는 음식점이 있는 건물이 9*2/5 = 3.6개가 있습니다.
여기까지 어떠신가요?
면접관: 직감에 의존한 면이 많긴하지만 계속 진행해주세요.
나: 그렇다면 제 근처 3km^2의 음식점이 있는 건물의 수는, 0.0314km^2에서 3.6개가 있었으므로, 약 360개가 있다고 가정할 수 있습니다.
거기에 각 건물에 상가의 개수가 평균적으로 2개라고 가정하면 상가의 개수는 720개.
이중 60%가 음식점이라고 가정한다면 720*0.6 = 432개이고, 이 가정은 제 직감에 의존했습니다.
즉, 제 근처에는 432개의 음식점이 있다고 추론할 수 있습니다.
아까전에, 전체 음식을 취급하는 상가 중, 타코를 판매하는 상가를 40%로 두었으므로,
제 근처에서 타코를 판매하는 음식점의 개수는 432*0.4 = 172.8. 약 173개 입니다.
여기까지 어떠신가요?
면접관: 좀 많은 감이 있긴하지만 계속해주세요.
나: 이제 "제일 맛있는"의 기준을 세우도록 하겠습니다.
제일 맛있다의 기준은 배달의 민족 리뷰수가 많고 별점이 높을 수록 객관적으로 맛있다고 가정하겠습니다.
그리고 배달의 민족의 별점은 4점 후반대로 상향평준화되어 있으므로, 편의상 별점 5점에, 리뷰의 신뢰성을 위해서 리뷰수가 100개이상인 음식점을 "제일 맛있다"라고 정하겠습니다.
그리고 이러한 음식점은 전체의 10%로 가정하곘습니다. 이 수치는 제가 배달의 민족 어플을 수십번 사용하면서 생긴 직감입니다.
이렇게 약 17개의 타코집이 남습니다.
여기까지 어떠신가요?
면접관: 타코 맛집이지만 배달의 민족을 이용하지 않거나, 악성 리뷰어때문에 5점을 받지 못한 가게도 제외되겠군요? 네 계속해보세요.
나: 그렇군요. 지적 감사합니다.
지금은 편의상 말씀해주신 사항을 적용하지 않겠습니다.
이제 "제일 맛있다"의 기준을 추가하겠습니다.
제일 맛있는 것은 제가 먹는 시점에 맛있어야 합니다.
주문하고 빠른 시간내에 눅눅해지지 않고 불지않은 상태로 먹어야 맛있음이 크기 때문입니다.
그래서 저 17개의 타코집 중에서, 저희집 위치와 가장 가까운 타코집을 선택하면 될것 같습니다.
거리를 계산하는 공식은 유클리디안 거리계산 공식을 사용하겠습니다.
min(타코집들 iterable => Math.sqrt( (타코집위치x - 내위치x)^2 + (타코집위치y - 내위치y)^2) ))
이상입니다.
면접관: 부족하지만 잘들었습니다.