[Java] Map 연습문제

1. 나라의 수도 이름 맞추기

랜덤으로 뽑힌 나라의 이름을 맞추는 게임

  • 20개의 나라-수도가 들어있는 Map이 주어진다.
  • 랜덤으로 5개의 문제를 뽑는다.
  • 클라이언트로부터 수도를 입력 받는다.
  • 정답인지 오답인지 입력 즉시 출력한다.
  • 문제가 끝나고 나면 점수를 출력한다.
package quiz;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;

public class Quiz03 {

	public static final Map<String, String> capitalMap = new HashMap<String, String>() {
        {
            put("대한민국", "서울");
            put("덴마크", "코펜하겐");
            put("독일", "베를린");
            put("러시아", "모스크바");
            put("벨기에", "브뤼셀");
            put("브라질", "브라질리아");
            put("스웨덴", "스톡홀름");
            put("스위스", "베른");
            put("스페인", "마드리드");
            put("아르헨티나", "부에노스아이레스");
            put("이집트", "카이로");
            put("이란", "테헤란");
            put("이탈리아", "로마");
            put("일본", "도쿄");
            put("필리핀", "마닐라");
            put("핀란드", "헬싱키");
            put("프랑스", "파리");
            put("튀르키예", "앙카라");
            put("캐나다", "오타와");
            put("콜롬비아", "보고타");
        }
    };

2. 생각한 풀이순서

  1. 반복문을 돌리기위해 key만 뽑아 list에 저장한다.
  2. 랜덤으로 숫자를 뽑아 list에 저장해 놓은 key를 가져온다.
  3. 뽑힌 숫자(문제)가 중복인지 체크한다.
  4. 문제 출력
  5. 클라로부터 수도를 입력 받는다.
  6. 정답/오답 확인
  7. 정답일 경우 총점에 점수를 더한다.
  8. 총점 출력

3. 정답 코드

  public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    Random rand = new Random();

    Set<String> keys = capitalMap.keySet(); // 문제는 랜덤으로 뽑을 것이므로 set에 저장해도 무방
    List<String> keyList = new ArrayList<>(keys);

    int score = 0;
    List<Integer> duplication = new ArrayList<>(); // 중복검사용

    for (int i = 0; i < 5; i++) {
      int randIndex = rand.nextInt(keyList.size()); // rand.nextInt(0-x까지) 'keyList.size() == 5 / index = 0 1 2 3 4'

      if (duplication.contains(randIndex)) {
        i--; // 중복일 경우 다시 뽑는다.
        continue;
      }
      duplication.add(randIndex); // 중복되지 않은 랜덤값일 경우 중복검사용 list에 저장 -> for문 돌때 저장되어있는 수 검사

      String country = keyList.get(randIndex);
      System.out.print(country + " 수도 이름은?");

      String answer = scan.nextLine();
      if (answer.equals(capitalMap.get(country))) { // 입력값과 map의 v 확인
        System.out.println("정답");
        score += 100 / 5;
      } else {
        System.out.println("오답입니다.");
      }
    }
    
    System.out.println("총 점수: " + score);
  }

}

Categories:

Updated:

Leave a comment