BOJ 사이트를 돌아 보다가, 스크롤을 맨 아래로 내리는 순간 유저 대회인 '제 1회 구데기컵'이라는 대회가 눈에 띄었습니다. 이름이 너무 강렬해서 클릭해 보니 문제들이 꽤 있었습니다. 호기심에 첫 번째 문제인 Africa를 클릭해 보니 문제가 장난 아니게 길어서 당황했네요;
문제에서 힌트와 조건만 잘 찾아 내서 풀면 되는 문제였습니다. 숨어 있는 조건을 찾지 못하고 그냥 푼다면 틀리기 일쑤입니다. 이번 문제는 길어서 더보기로 넣겠습니다. 그리고 원래 문제에는 없지만 풀이를 위해 단락마다 번호를 넣겠습니다.
문제
1) 라이언의 고향은 아프리카의 어느 섬이라고 한다. 사자의 서식지는 주로 아프리카의 초원지대로 알려져 있는데, 아쉽게도 아프리카의 섬 중 사자의 서식지 또는 과거에 사자가 서식했던 지역은 없기 때문에 라이언의 고향이 섬이라는 것은 누군가의 착각에 의해 잘못 알려졌을 가능성이 높다. 사실 아프리카 내에 바다로 생각할 만큼 매우 큰 호수가 많아서 섬이었던 걸로 오해했을 가능성도 있다.
아프리카 내의 여러 호수 중 가장 큰 호수는 빅토리아 호로, 동아프리카의 세 나라인 우간다, 케냐, 탄자니아에 걸쳐 있다. 역시 케냐와 탄자니아의 국경에 걸쳐 있는 세렝게티 지역과 거의 맞닿아 있다. 세렝게티는 3만 제곱 킬로미터가 넘는 땅으로 초원 지역과 사바나, 목초지 등이 어우러져 있어 다양한 동식물을 볼 수 있는 곳이다. 이 곳을 둘러보는 사파리 투어는 아프리카 여행의 백미라고 할 수 있는데, 자연의 보존을 위해 일부 지역에 한해 정해진 경로로만 가야 하지만 그만큼 자연 본연의 상태가 잘 보존되어 있어 명성이 높다. 특히 초원 지역의 경우 풀들의 크기가 낮아 동물이 잘 보이고, 빅5를 모두 볼 수 있는 곳이기도 하다. 빅5란 아프리카의 사파리에서 보기 어려운 다섯 종류의 동물을 말하는데, 코끼리, 코뿔소, 버팔로, 표범, 그리고 사자가 여기에 속한다. 아프리카의 여러 나라에 사파리가 있지만 빅5를 모두 볼 수 있는 곳은 많지 않다고 한다.
2) 사파리란 스와힐리어로 여행을 뜻하는 말로, 자연 공원을 돌아다니며 야생동물을 보는 여행을 말한다. 많은 여행객들이 찾는 나라에는 대부분 사파리가 있고, 각 지역마다 스타일이 다르다. 또한 사파리를 즐기는 방법도 다양한데, 차량을 타고 동물을 보는 게임 드라이브, 강 혹은 호수를 따라 보트를 타며 구경하는 보트 사파리, 직접 걸어다니면서 볼 수 있는 워킹 사파리, 해가 진 뒤 나타나는 동물을 보기 위해 밤중에 진행하는 나이트 사파리 등이 있다.
3) 유명한 사파리 중 하나로 나미비아의 에토샤를 들 수 있는데, 이 곳은 특히 2년 전 나미비아 지역을 여행하는 예능 프로그램인 '꽃보다 청춘'이 방영되면서 많이 알려진 곳이다. 다른 사파리와 다르게 직접 자신이 차량을 운전하며 다닐 수 있기 때문에 그만큼 자유도가 높다. 공원 안에는 캠프사이트가 마련되어 있어 여러 날에 걸쳐 여행할 수 있고, 근처에 워터홀이 있어 동물을 가까이에서 볼 수 있다. 이 지역은 매우 건조하기 때문에 동물들이 물을 마시기 위해 곳곳에 있는 워터홀에서 목을 축이는데, 그 종류도 다양하고 다른 곳에서 보기 힘든 코뿔소도 워터홀에서 볼 수 있다고 한다.
4) 하지만 나미비아의 경우 우리나라와 비자 면제 관련 협정이 체결되어 있지 않기 때문에 나미비아를 여행하기 위해서는 사전에 비자를 받아야 한다. 우리나라에는 대사관이 없어 아프리카의 다른 나라로 입국한 뒤 그 나라에 있는 나미비아 대사관에서 비자를 받거나 대행사를 통해 비자를 받아야 한다. 대행사를 통해 비자를 받는 경우 필요한 비용은 140달러로 매우 비싸기 때문에 현지에서 비자를 받는 것이 비용 측면에서는 유리하지만, 아프리카에서 한국인이 나미비아 비자를 받을 수 있는 곳은 매우 한정적이다. 많은 여행객들이 가는 지역 중에서는 남아프리카공화국의 케이프타운이 사실상 유일하기 때문에 경로 상 남아프리카공화국을 먼저 방문하지 않거나 케이프타운에서 비자가 발급될 때까지 충분히 머무를 수 없는 사람의 경우 한국에서 비자를 신청해야 한다. 만약 남아프리카공화국에서 비자를 받는 것이 가능하다면 그 비용은 40달러로 매우 저렴해진다. 그리고 케이프타운에서는 나미비아로 버스 혹은 비행기를 타고 갈 수 있기 때문에 나미비아를 여행하는 사람들은 보통 케이프타운으로 입국한 뒤 비자를 발급받고 나미비아로 향하는 경우가 많다.
5) 그런데 나미비아 외에도 아프리카의 국가 중 입국하기 위해 비자가 필요한 국가는 매우 많다. 매년 발표되는 여권 파워 랭킹에서 대한민국은 항상 높은 순위를 유지하는 편인데, 최근에 발표된 2018 랭킹에서 대한민국 여권은 싱가포르 여권과 163점으로 공동 1위를 기록했다. 여기에서 점수는 비자 없이 방문할 수 있는 국가의 수를 의미하는데, 여기에는 미리 비자를 발급받을 필요 없이 입국 과정에서 비자를 받을 수 있는 경우도 포함하기 때문에 완전한 무비자 입국 가능 국가는 이보다는 적다고 할 수 있다. 사실 도착 비자를 발급한다는 것은 여권만 있으면 별도의 조건 없이 입국이 가능하다는 것을 의미하기 때문에 도착 비자 발급 가능 국가가 무비자 입국 가능 국가와 비교되는 것이 합리적이라고 생각할 수 있지만, 도착 비자의 경우 일정 수준의 비자 발급 비용을 내야 하기 때문에 여행 경비를 생각해야 하는 여행자의 입장에서는 신경 쓰지 않을 수 없는 요소이기도 하다. 예를 들어 케냐에 입국하려면 50달러를 내고 1회 입국이 가능한 비자를 발급받거나, 100달러를 내고 여러 번 입국이 가능한 비자를 받아야 한다.
6) 한국인이 많이 찾는 아프리카의 국가 중 무비자 입국이 가능한 국가로는 남아프리카공화국과 보츠와나가 있다. 남아프리카공화국은 무비자 입국으로 30일 체류가 가능하며, 보츠와나는 90일 체류가 가능하다. 이 중 남아프리카공화국은 아프리카의 최남단에 위치한 지리적 특성 및 항공편이 많다는 특징으로 인해 아프리카 종단 여행의 첫 여행지 혹은 마지막 여행지로 많이 선택되는 편이다. 보츠와나는 남아프리카의 내륙국으로 남아프리카공화국 및 나미비아 등과 국경을 접하고 있다. 보츠와나의 유명한 관광지로는 쵸베 국립공원이 있는데, 여기 역시 유명한 사파리 중 하나로 보트 사파리가 있다는 점이 다른 곳과의 차별점이라고 할 수 있다.이 지역은 보츠와나의 북쪽에 있기 때문에 보츠와나의 북쪽 국경과 맞닿는 잠비아 혹은 짐바브웨를 여행하면서 같이 여행하기 좋다. 즉, 남아프리카공화국과도 육로로 연결되기는 하지만 관광객의 입장에서는 남아프리카공화국에서 보츠와나로 직접 이동하는 경우는 거의 없으며, 대부분 나미비아에서 이동한다. 나미비아의 수도 빈트후크에서 쵸베 국립공원의 남쪽에 위치한 도시인 마운으로 이동하는 경로가 일반적인데, 정기 버스 노선이 없어 히치하이킹을 해서 이동해야 하는 등의 불편함이 있었으나 최근에는 특정 요일에 한해 육로로 이동하는 노선이 있어 이전보다 이동이 용이해졌다고 한다.
7) 보츠와나의 도시 마운은 보통 오카방고 델타를 가기 위해 많이 찾는 도시이다. 2014년에 유네스코 세계 자연유산으로 등록된 곳이기도 하다. 습지와 평원으로 이루어진 삼각주로 오카방고 강 하류에 형성되어 있는데, 일반적인 삼각주가 강과 바다가 맞닿는 지역에 형성되는 것과는 달리, 오카방고 델타는 내륙 한가운데에 위치해 있다. 아프리카의 다른 자연 공원과 마찬가지로 수많은 조류와 야생동물이 서식하고 있다. 오카방고 델타를 즐기는 방법으로는 첫 번째로 경비행기 투어가 있는데, 오카방고 델타 전역을 하늘 위에서 관찰하는 방법이다. 하지만 이 경우 동물을 가까이에서 볼 수 없고 비용이 매우 비싸기 때문에 일반적으로 선택하는 방법은 아니다. 많은 여행객이 선택하는 방법은 모코로 투어로, 이 지역의 전통 배인 모코로를 이용해 강을 돌아다니는 것이다. 모코로를 타고 델타 안쪽으로 이동해 캠핑을 하고 돌아오는 1박 2일 일정으로 볼 수도 있고 당일 여행으로 볼 수도 있다. 해마다 강물이 범람하는 지역이기 때문에 어떤 시기에 가는지에 따라 볼 수 있는 야생동물의 종류가 다른데, 건기에 해당하는 6월에서 9월 사이에 가면 코끼리, 하마, 사자, 코뿔소 등의 야생동물을 쉽게 볼 수 있다고 한다.
8) 오카방고 델타의 관문 도시인 마운에서 쵸베 사파리로 주로 방문하는 지역인 북부의 카사네까지는 직선거리로는 그리 멀지 않지만 쵸베 국립공원을 관통하는 도로는 없기 때문에 도로를 따라 둘러서 이동해야 한다. 거의 하루를 이동해야 하는 경로이기 때문에 시간이 없는 여행자는 마운 공항에서 카사네 공항까지 이동하는 항공편을 이용할 수도 있다. 이 항공편은 주 2회 운항하기 때문에 항공편을 이용할 계획이 있는 경우 요일에 맞춰 잘 계획을 세워야 한다. 항공편을 이용하면 1시간만에 이동할 수 있지만 자동차로 이동하면 7시간이 걸리며 버스 등을 이용할 경우 그보다 긴 시간이 소요된다고 생각하면 된다.
9) 카사네는 보츠와나의 최북단에 위치한 도시로, 이 도시 바로 근처에 보츠와나와 나미비아, 잠비아, 짐바브웨의 4개국의 국경이 만나는 지점이 있다. 잠비아와 짐바브웨 모두 한국인의 경우 도착 비자를 발급받아 입국하는 국가이기 때문에 국가 방문 순서에 따른 비자 발급 계획을 잘 세워야 하는 지점이기도 하다. 짐바브웨의 경우 1회 입국 가능한 비자의 발급 비용이 30불, 2회 입국 가능한 비자는 45불이다. 잠비아는 1회 입국 가능한 비자가 50불, 2회 입국 가능한 비자가 80불이다. 아프리카의 명소인 빅토리아 폭포는 잠비아와 짐바브웨의 국경에 위치하고 있는데, 폭포를 양쪽에서 보기 위해서는 국경을 넘어야 한다는 점을 고려해야 한다. 다행히 이와 같이 방문하는 여행객들이 선택할 수 있는 옵션이 한 가지가 더 있는데, 잠비아-짐바브웨 연합 비자가 이에 해당한다. 이 비자를 발급받을 경우 지정된 기간 동안 짐바브웨와 잠비아 간을 제한 없이 방문할 수 있다. 단, 잠비아 혹은 짐바브웨가 아닌 다른 국가로 이동한 경우 비자는 유효하지 않게 된다. 이 비자를 발급받는 비용은 50불로, 두 국가를 모두 방문할 계획이 있는 여행객이라면 이를 발급받는 것이 유리하다. 따라서 국가별 방문 순서를 잘 정하면 비자 발급 비용을 절약할 수 있다. 그래서 국가를 방문하는 순서가 있을 때 총 비자 발급 비용을 구하려고 한다. 지금까지의 설명과 앞으로 적을 다른 국가 및 지역에 대한 소개를 조합하면 이를 해결하기 위한 충분한 정보를 얻을 수 있을 것이다. 이때 비용을 줄이기 위해 정해진 순서 중간에 다른 국가를 방문하는 것도 생각해볼 수 있겠지만 일단 여기에서는 생각하지 않기로 하자.
10) 앞에서도 언급한 빅토리아 폭포는 아프리카 최대의 폭포로, 잠비아와 짐바브웨 사이에 있는 잠베지 강에 있는 폭포이다. 스코틀랜드의 탐험가인 리빙스턴이 유럽인 중 최초로 이 폭포를 발견했다고 알려져 있으며, 당시 영국의 여왕의 이름을 따서 빅토리아 폭포로 명명했다. 이 역시 유네스코 세계 자연유산으로 등록되어 있는데, 등록된 이름은 모시 오아 툰야이며 빅토리아 폭포라는 이름도 병기되어 있다. 모시 오아 툰야는 이 지역에서 빅토리아 폭포를 이르는 표현으로, 천둥 소리가 나는 연기라는 뜻이라고 한다. 빅토리아 폭포 양쪽에 있는 도시는 잠비아의 리빙스턴과 짐바브웨의 빅토리아 폴스로, 두 도시 사이는 걸어서 이동이 가능하며, 국경을 넘는 것이기 때문에 알맞은 비자를 받아야 한다. 짐바브웨는 매우 넓은 면적을 가진 남아프리카의 국가이며 흔히 엄청난 인플레이션을 기록한 화폐인 짐바브웨 달러로 알려진 곳이기도 하다. 현재는 미국 달러를 사용하고 있다. 알려진 여행지는 사실상 서쪽 끝에 위치한 빅토리아 폭포가 유일하기 때문에 주로 당일치기로 방문하는 편이다. 반면 잠비아는 위치 상 동아프리카 지역의 국가로 가기 위해 거쳐야 하는 국가이기도 해서 리빙스턴 북쪽에 위치한 지역으로도 많이 가는 편이다.
11) 잠비아와 인접한 동아프리카의 국가인 탄자니아로 가기 위해서는 여행객들에게 많이 알려진 타자라 철도를 이용한다. 이 철도는 잠비아의 뉴 카피리 음포시 역과 탄자니아의 다르에스살람 역을 잇는 철도로, 선로의 길이가 1860km이며 소요시간은 급행열차 기준으로 약 30시간이다. 최근에는 많이 줄었다고는 하지만 연착되는 경우가 많기 때문에 철도를 이용하여 이동할 경우 일정을 여유 있게 잡는 편이 좋다. 열차 안에서 각종 음식 등을 파는데 잠비아와 탄자니아의 화폐가 다르기 때문에 구입하는 시점에 열차가 있는 위치에 따라 사용할 수 있는 화폐가 다르다고 한다. 국경을 넘을 때는 비자 업무를 담당하는 직원이 열차에 탑승해 객실에서 업무를 처리하는데, 이때 여권과 비자 발급 비용을 내면 도착 비자를 받고 입국이 가능하다. 탄자니아 비자의 발급 비용은 $50이다. 단 여러 번 입국하기 위한 비자는 $100를 내고 발급이 가능하다.
12) 탄자니아에서 주로 방문하는 곳은 앞에서 언급한 세렝게티 및 잔지바르, 킬리만자로 등이 있다. 잔지바르는 탄자니아 동쪽에 위치한 섬으로, 다르에스살람에서 페리 또는 비행기를 타고 방문할 수 있다. 이 곳은 지리적 특성으로 인해 오래 전부터 무역항으로 이용되었고 매우 복잡한 역사를 가지고 있다. 잔지바르의 구시가인 스톤 타운은 유네스코 세계유산으로 등록된 곳이기도 하다. 특히 인도양의 에메랄드빛 바다와 새하얀 백사장을 보기 위해 많은 사람들이 찾고 있는 곳이다.
13) 킬리만자로는 탄자니아 북동부에 있는 화산으로, 아프리카에서 가장 높은 산이다. 흔히 사람들이 아프리카를 더운 지역으로 알고 있지만 그와 대비되는 정상부의 만년설로 유명한 곳이다. (물론 아프리카가 모두 더운 지역인 것은 아니다.) 매우 높은 산이고 현지 규정 상 가이드를 통해서만 등산이 가능한데 이 비용이 매우 비싸다. 대부분 4박 5일, 혹은 5박 6일의 일정으로 등반하는데 비용은 약 1300$ 정도이다. 이 중 대부분은 킬리만자로 입장료인데, 체류하는 1일 당 70달러, 캠핑 비용 1박 당 50달러, 응급상황에 대비한 보험료 20달러 등 입장료로 약 900$를 내야 한다. 하지만 굳이 등반을 하지 않더라도 다르에스살람에서 세렝게티를 거쳐 케냐의 수도인 나이로비로 가는 경로 상에 있기 때문에 자연스럽게 방문할 수 있는 곳이기도 하다.
14) 세렝게티에 가기 위해서는 탄자니아 북부의 도시인 아루샤에서 출발하는 것이 일반적이다. 여기에서 현지 여행사를 통해 5일 혹은 6일 정도의 일정으로 세렝게티를 방문할 수 있는데, 세렝게티 동쪽의 응고롱고로 분화구 역시 놓치면 안 되는 지역이다. 마사이어로 '큰 구멍'을 의미하는 응고롱고로는 사화산의 분화구로 높이는 해발 2300미터이고 분화구의 지름은 18km에 달한다. 주변이 높고 험하기 때문에 이 곳의 동물의 경우 주변과 분리된 환경에서 살고 있으며 밀도도 높아 동물을 보기 쉬운 곳이기도 하다.
15) 세렝게티 국립공원은 탄자니아의 북쪽 국경과 붙어있는데 바로 맞닿은 지역은 케냐의 국립공원인 마사이 마라이다. 이 곳은 세렝게티에 비해 크기는 작지만 세렝게티와 같은 생태계로 볼 수 있기 때문에 볼 수 있는 동물의 종류는 세렝게티와 비슷하다. 특히 7월에서 9월까지는 동물이 마사이 마라 쪽으로 많이 이동하는 시기이기 때문에 이 기간에 맞춰 방문하는 여행객이 많다. 마사이 마라 국립공원은 케냐의 수도 나이로비에서 출발하는 사파리 프로그램으로 방문할 수 있다.
16) 케냐 북쪽에 있는 에티오피아는 케냐에서 육로로 가기에는 거리가 멀어 주로 항공편으로 이동하는데, 아프리카 여행을 하기 위해 항공편을 타는 경우 에티오피아의 수도 아디스아바바를 경유지로 하는 경우가 많기 때문에 스톱오버를 통해 에티오피아를 여행할 수 있다. 에티오피아 역시 50달러를 내고 도착비자 발급이 가능하다. 에티오피아는 최초 인류 화석이 발견된 곳이기도 하며 에티오피아 지역의 옛 왕국인 악숨 및 과거 에티오피아 제국의 수도인 곤다르 등이 가볼만한 곳이다. 또한 에티오피아 북동부에 있는 사막 지대인 다나킬 사막도 많이 방문하는 곳인데, 이 곳은 활화산을 가장 가까이에서 볼 수 있는 곳으로 유명해 건조하고 척박한 지역임에도 불구하고 많은 사람들이 가는 곳이기도 하다.
17) 지금까지 소개한 지역 외에도 아프리카에는 여러 국가가 있고 가볼만한 곳이 많지만 시간 상의 제약으로 인해 위의 국가를 방문하는 여행 계획을 짜려고 한다. 이번 여름에 아프리카를 여행하면서 사자를 만나고 싶어하는 브라이언의 여정에 동참하고 싶은 사람은 한 번 연락해보는 것도 좋겠다.
입력
첫 줄의 입력 데이터의 개수N (1 ≤ N≤ 8)이 입력된다.
다음 N줄에 걸쳐 한 줄에 하나씩 단어가 입력되며, 입력되는 단어는 다음의 8개 중 하나이며, 같은 단어가 두 번 이상 입력되는 경우는 없다.
문제에 해당하는 답을 출력한다. 문제 해결에 필요한 모든 정보는 이 문제에서 제시되는 것을 기준으로 한다.
예제 입력
3
ethiopia
kenya
tanzania
* 예제는 하나만 적겠습니다.
예제 출력
150
답안
import java.util.Scanner;
class Main
{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int cost = 0;
boolean SAexists = false;
boolean ZIexists = false;
boolean ZAexists = false;
String plan;
for(int i = 0 ; i < N ; i++)
{
plan = sc.next();
switch (plan)
{
case "botswana" :
cost += 0;
break;
case "ethiopia" :
cost += 50;
break;
case "kenya" :
cost += 50;
break;
case "namibia" :
if(SAexists) cost += 40;
else cost += 140; //대행사 $140
break;
case "south-africa" :
SAexists = true;
cost += 0;
break;
case "tanzania" :
cost += 50;
break;
case "zambia" :
ZAexists = true;
if(ZIexists)
cost += 20 + 0;
else cost += 50;
break;
case "zimbabwe" :
ZIexists = true;
if(ZAexists)
cost += 0;
else cost += 30;
break;
}
if(!plan.equals("zambia") && !plan.equals("zimbabwe"))
{
ZAexists = false;
ZIexists = false;
}
}
System.out.println(cost);
}
}
풀이
문제가 깁니다. 그렇다고 지레 겁먹고 못 풀 문제는 아닙니다.
입력 예제를 보니 여행 경로 같습니다. 출력은 걸리는 시간일 수도 있고, 드는 비용일 수도 있고, 아직까지는 확실치 않네요. 혹시 모르니 숫자가 나올 때마다 메모해 두기로 합시다. 하지만 한 단락씩 읽다 보면 문제와 문제의 조건, 힌트 등이 모두 쉽게 드러나기 때문에, 차근차근 읽는다면 쉽게 해결할 수 있습니다. 문단별로 어떤 힌트가 있는지 알아 봅시다.
1) 2) 3) 딱히 힌트는 없는 것 같습니다.
4) "대행사를 통해 비자를 받는 경우 필요한 비용은 140달러로 매우 비싸기 때문에 현지에서 비자를 받는 것이 비용 측면에서는 유리하지만, 아프리카에서 한국인이 나미비아 비자를 받을 수 있는 곳은 매우 한정적이다."와 "많은 여행객들이 가는 지역 중에서는 남아프리카공화국의 케이프타운이 사실상 유일하기 때문에 경로 상 남아프리카공화국을 먼저 방문하지 않거나 케이프타운에서 비자가 발급될 때까지 충분히 머무를 수 없는 사람의 경우 한국에서 비자를 신청해야 한다. 만약 남아프리카공화국에서 비자를 받는 것이 가능하다면 그 비용은 40달러로 매우 저렴해진다." 이 두 문장에서 힌트를 알 수 있습니다. 여기부터 뭔가 힌트가 나오네요. 뭘 구해야 하는지는 아직 모르겠지만, 일단 적어둡시다. "나미비아를 갈 때 남아공을 거쳐 가면 $40, 바로 가면 $140"
5) "예를 들어 케냐에 입국하려면 50달러를 내고 1회 입국이 가능한 비자를 발급받거나, 100달러를 내고 여러 번 입국이 가능한 비자를 받아야 한다."
이것도 적어둡시다. 아무래도 문제에서 구해야 하는 게 비용일 것 같네요. "케냐 1회 입국 비자는 $50, 여러 번 입국 가능 비자는 $100"
6) "남아프리카공화국은 무비자 입국으로 30일 체류가 가능하며, 보츠와나는 90일 체류가 가능하다."
두 개의 국가가 한 번에 나오네요. "남아공은 무비자 30일, 보츠와나는 무비자 90일"
7) 마운과 오카방고 델타에 관한 설명 뿐입니다. 1박 2일 프로그램 얘기가 있는데 당일치기도 있다고 하니까 이건 힌트가 아니겠네요.
8) 역시 오카방고 델타에 대한 설명입니다. 별다른 힌트는 없습니다.
9) "짐바브웨의 경우 1회 입국 가능한 비자의 발급 비용이 30불, 2회 입국 가능한 비자는 45불이다. 잠비아는 1회 입국 가능한 비자가 50불, 2회 입국 가능한 비자가 80불이다.", "다행히 이와 같이 방문하는 여행객들이 선택할 수 있는 옵션이 한 가지가 더 있는데, 잠비아-짐바브웨 연합 비자가 이에 해당한다. 이 비자를 발급받을 경우 지정된 기간 동안 짐바브웨와 잠비아 간을 제한 없이 방문할 수 있다. 단, 잠비아 혹은 짐바브웨가 아닌 다른 국가로 이동한 경우 비자는 유효하지 않게 된다. 이 비자를 발급받는 비용은 50불로, 두 국가를 모두 방문할 계획이 있는 여행객이라면 이를 발급받는 것이 유리하다.", "따라서 국가별 방문 순서를 잘 정하면 비자 발급 비용을 절약할 수 있다. 그래서 국가를 방문하는 순서가 있을 때 총 비자 발급 비용을 구하려고 한다. 지금까지의 설명과 앞으로 적을 다른 국가 및 지역에 대한 소개를 조합하면 이를 해결하기 위한 충분한 정보를 얻을 수 있을 것이다. 이때 비용을 줄이기 위해 정해진 순서 중간에 다른 국가를 방문하는 것도 생각해볼 수 있겠지만 일단 여기에서는 생각하지 않기로 하자."
많은 힌트가 있는 단락입니다. 게다가 문제에서 뭘 구해야 하는지도 나와 있습니다. 총 비자 발급 비용을 구해야 하고, 언급되지 않은 국가는 거쳐가지 않는다고 합니다. 또 짐바브웨와 잠비아로 가는 비자의 발급 비용도 있네요. "짐바브웨 1회 입국 가능한 비자는 $30, 2회 입국 가능한 비자는 $45, 잠비아 1회 입국 가능한 비자는 $50, 2회 입국 가능한 비자는 $80, 짐바브웨에서 잠비아, 잠비아에서 짐바브웨로 이동할 때는 한 번만 $50, 중간에 다른 나라로 가면 무효"
짐바브웨에서 잠비아로 갈 때 50달러 한 번만 내는 걸로 처리하려면 짐바브웨 다음에 잠비아로 갈 때 20달러만 더하면 되겠군요.
10) - 15) 비자 발급 비용에 관한 내용은 없습니다.
16) "에티오피아 역시 50달러를 내고 도착비자 발급이 가능하다. "
에티오피아까지 나왔군요. 다음 단락에도 달리 힌트는 없으니 바로 문제를 풀면 되겠습니다.
다음 표는 현재까지 나온 비자 발급 비용들을 적어 둔 것입니다. 문제에서 같은 국가를 여러 번 방문하지 않는다고 언급했기 때문에 2회 이상 방문할 때 필요한 비자 발급 비용은 적지 않겠습니다.
국가명
비자 발급 비용
비고
나미비아
$140 ( $40 )
( ) : 남아공을 거쳤을 경우
케냐
$50
남아공
$0
무비자 30일
보츠와나
$0
무비자 90일
짐바브웨
$30 ( $0 )
( ) : 이전 국가가 잠비아
잠비아
$50 ( $20 )
( ) : 이전 국가가 짐바브웨
탄자니아
$50
에티오피아
$50
도착비자
for문으로 N번 반복하면서 switch문에 각 국가마다 정수 변수 하나에 비용을 더하기로 합시다.
for(int i = 0 ; i < N ; i++)
{
plan = sc.next();
switch (plan)
{
case "botswana" : //보츠와나
cost += 0; //무비자 90일
break;
case "ethiopia" : //에티오피아
cost += 50; //도착비자 $50
break;
case "kenya" : //케냐
cost += 50; //1회 입국 $50
break;
case "namibia" : //나미비아
cost += 140; //대행사 $140
break;
case "south-africa" : //남아공
cost += 0; //무비자 30일
break;
case "tanzania" : //탄자니아
cost += 50; //1회 입국 $50
break;
case "zambia" : //잠비아
cost += 50; //1회 입국 $50
break;
case "zimbabwe" : //짐바브웨
else cost += 30; //1회 입국 $30
break;
}
}
추가 조건이 없었다면 그냥 이대로 for문과 switch문을 쓰면 되겠지만, 나미비아랑 짐바브웨, 잠비아 때문에 뭔가를 더 해야겠습니다. 저는 boolean형 변수를 이용하는 것으로 해결했습니다.
남아공에 간 적이 있다면 나미비아를 갈 때 필요한 비자를 발급할 수 있기 때문에 남아공에 들른 적이 있기만 하다면 나미비아에 가는 비용은 $40입니다. 변수 하나(위에서는 SAexists)를 false로 선언해 남아공에 간 적이 있을 때 true가 되도록 설정합시다. 이렇게 하면 이후에 나미비아를 입력하면 40을 더합니다.
boolean SAexists = false;
case "south-africa" : // switch문 안
SAexists = true;
cost += 0;
break;
짐바브웨랑 잠비아가 좀 복잡할 수 있는데요, 짐바브웨에서 잠비아로 갈 때는 $20달러만 더 내는 걸로 처리하면 되겠고, 잠비아에서 짐바브웨로 갈 때 짐바브웨에서는 비자 발급 비용을 안 더해도 되겠네요. 이렇게 하면 딱 $50
낸 게 됩니다. 짐바브웨나 잠비아를 방문하면 변수 하나씩(위에서는 각각 ZIexists와 ZAexists) 그리고 짐바브웨나 잠비아로 갔다가 다른 나라로 갔을 경우에는 이 비자를 사용할 수 없기 때문에 다른 나라를 방문했을 때는 이 두 변수를 모두 false로 만들어 주는 작업이 필요합니다.
case "zambia" : // switch문 안
cost += 50;
break;
case "zimbabwe" :
else cost += 30;
break;