트랙
/
Java
Java
/
연습 문제
/
국제 전화 전문가
국제 전화 전문가

국제 전화 전문가

학습 연습 문제

소개

Map

Map은 키와 값을 짝지어 저장하는 자료 구조예요. 다른 프로그래밍 언어의 딕셔너리와 비슷해요. Map 인터페이스는 맵에서 할 수 있는 연산을 정의해요.

Java에는 여러 가지 Map 구현이 있어요. HashMap이 흔히 쓰이는 구현이에요.

// Make an instance
Map<String, Integer> fruitPrices = new HashMap<>();

put으로 맵에 항목을 추가해요.

fruitPrices.put("apple", 100);
fruitPrices.put("pear", 80);
// => { "apple" => 100, "pear" => 80 }

각 키에는 값 하나만 연결할 수 있어요. 같은 키로 put을 호출하면 그 키의 값이 바뀌어요.

fruitPrices.put("pear", 40);
// => { "apple" => 100, "pear" => 40 }

get으로 키의 값을 가져와요.

fruitPrices.get("apple"); // => 100

containsKey로 맵에 특정 키가 있는지 확인해요.

fruitPrices.containsKey("apple");  // => true
fruitPrices.containsKey("orange"); // => false

remove로 항목을 제거해요.

fruitPrices.put("plum", 90);  // Add plum to map
fruitPrices.remove("plum");   // Removes plum from map

size 메서드는 항목의 개수를 반환해요.

fruitPrices.size();  // Returns 2

keySet이나 values 메서드를 사용하면 Map의 키는 Set으로, 값은 Collection으로 각각 가져올 수 있어요.

fruitPrices.keySet();  // Returns "apple" and "pear" in a set
fruitPrices.values();  // Returns 100 and 80, in a Collection

지침

이 연습 문제에서는 Map을 사용해 국제 전화 코드 딕셔너리를 관리하는 코드를 작성해요.

이 딕셔너리에서는 국제 전화 코드(Integer인 맵의 키)로 국가 이름(String인 맵의 값)을 조회할 수 있어요.

1. 코드를 담은 맵을 반환해요

매개변수를 받지 않고, 딕셔너리에 현재 들어 있는 전화 코드와 국가를 담은 맵을 반환하는 getCodes 메서드를 구현해요.

DialingCodes dialingCodes = new DialingCodes();
dialingCodes.getCodes();
// => empty map 

2. 딕셔너리에 항목을 추가해요

딕셔너리를 채워야 해요. 전화 코드와 그에 해당하는 국가를 받아 전화 코드와 국가를 추가하는 setDialingCode 메서드를 구현해요. 전화 코드가 이미 맵에 있으면, 주어진 코드와 국가로 맵을 업데이트해요.

DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(679, "Unknown");
// => { 679 => "Unknown" }

dialingCodes.setDialingCode(679, "Fiji");
// => { 679 => "Fiji" }

3. 전화 코드의 국가를 조회해요

전화 코드를 받아 그 전화 코드에 해당하는 국가 이름을 반환하는 getCountry 메서드를 구현해요.

DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(55, "Brazil");
dialingCodes.getCountry(55);
// => "Brazil"

4. 중복을 허용하지 않아요

전화 코드를 추가할 때는 코드나 국가가 두 번 추가되지 않도록 주의해야 해요. 이런 상황이 생기면 첫 번째 항목이 올바른 항목이라고 가정할 수 있어요. 주어진 전화 코드와 국가에 대한 항목을 추가하는 addNewDialingCode 메서드를 구현해요. 하지만 setDialingCode와 달리, 전화 코드나 국가가 이미 맵에 있으면 아무것도 하지 않아요.

DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addNewDialingCode(32, "Belgium");
dialingCodes.addNewDialingCode(379, "Vatican City");
// => { 32 => "Belgium", 379 => "Vatican City" }


dialingCodes.addNewDialingCode(32, "Other");
dialingCodes.addNewDialingCode(39, "Vatican City");
// => { 32 => "Belgium", 379 => "Vatican City" }

5. 국가의 전화 코드를 찾아요

드물지만 실수는 생길 수 있어요. 실수를 바로잡으려면 그 국가가 현재 어떤 전화 코드에 매핑되어 있는지 알아야 해요. 어떤 전화 코드를 고쳐야 하는지 찾기 위해, 국가를 받아 그 국가의 전화 코드를 반환하는 findDialingCode 메서드를 구현해요. 국가가 맵에 없으면 null을 반환해요.

DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(44, "UK");
dialingCodes.findDialingCode("UK");
// => 44

dialingCodes.findDialingCode("Unlisted");
// => null

6. 국가의 전화 코드를 업데이트해요

이제 어떤 전화 코드를 고쳐야 하는지 알았으니, 코드를 업데이트해요. 국가의 새 전화 코드와 국가 이름을 받아 그에 맞게 업데이트하는 updateCountryDialingCode 메서드를 구현해요. 국가가 맵에 없으면 아무것도 하지 않아요 (이 메서드는 실수를 바로잡는 데만 도움을 주기 위한 것이기 때문이에요).

DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(88, "Japan");
// => { 88 => "Japan" }

dialingCodes.updateCountryDialingCode(81, "Japan");
// => { 81 => "Japan" }

dialingCodes.updateCountryDialingCode(32, "Mars");
// => { 81 => "Japan"}
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Java Exercism

국제 전화 전문가 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Java 트랙을 개념 26개연습 문제 158개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.