[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. 생각한 풀이순서
- 반복문을 돌리기위해 key만 뽑아 list에 저장한다.
- 랜덤으로 숫자를 뽑아 list에 저장해 놓은 key를 가져온다.
- 뽑힌 숫자(문제)가 중복인지 체크한다.
- 문제 출력
- 클라로부터 수도를 입력 받는다.
- 정답/오답 확인
- 정답일 경우 총점에 점수를 더한다.
- 총점 출력
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);
}
}
Leave a comment