seaking110 님의 블로그
사전 캠프 5일차 본문
오늘은 자바 응용하기 문제 4개를 풀고 코딩 테스트용 알고리즘을 정리하려고 한다!
Lv.1 랜덤 닉네임 생성기
String s1[] = {"기절초풍","멋있는","재미있는"};
String s2[] = {"도전적인","노란색의","바보같은"};
String s3[] = {"돌고래","개발자","오랑우탄"};
Random r = new Random();
System.out.println(s1[r.nextInt(3)]+" "+s2[r.nextInt(3)]+" "+s3[r.nextInt(3)]);
대학교 1학년 때 풀었을거 같은 느낌의 문제로 랜덤은 정말 오랜만에 써보는거 같아서 대학교 1학년 때로 돌아간 느낌이 들었다.
r.nextInt(n) 으로 0~n 까지의 값을 랜덤으로 출력해준다.
Lv.2 스파르타 자판기
문제가 맵 관련 문제인 만큼 이왕 하는 김에 map 메소드에 대해 정리해보려고 한다!
Map 메소드 정리
1. put(K key, V value)
키와 값을 맵에 저장, 만약 키가 존재한다면 새로운 값으로 대체
Map<String, Integer> m = new HashMap<>();
m.put("apple", 50);
m.put("banana", 30);
m.put("banana", 20);
// apple : 50, banana : 20
2. get(Object key)
키 값에 따른 값을 반환, 만약 키가 없다면 null을 반환
int a = m.get("banana"); //20
3. remove(Object key)
키와 해당하는 값을 제거
m.remove("apple");
4. containsKey(key)
맵에 key가 포함되어 있는지 여부를 반환
boolean apple = m.containsKey("apple"); // false
5. containsValue(value)
맵에 value가 포함되어 있는지 여부를 반환
boolean price20 = m.containsValue(20); //true
6. keySet()
맵에 담긴 모든 키를 반환
Set<Integer> keySet = m.keySet();
for (Integer key : keySet) {
System.out.println(key + " : " + m.get(key));
}
7. value()
맵에 담긴 Collection을 반환
Collection<String> value = m.values();
System.out.println(value); // [Apple, Banana]
8. entrySet()
맵의 모든 키-값을 꺼내야 할 때
for (Map.Entry<String, Integer> entry : m.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
9. size()
맵에 저장된 키-값 쌍의 개수를 반환
int size = m.size();
10. getOrdefault(key, defaultValue)
키에 대응하는 값을 반환하고 키가 존재하지 않는다면 defaultValue 값을 반환
int price = m.getOrDefault("orange", 0); // 오렌지가 없으면 0 있으면 orage에 해당하는 값 반환
11. replace(key, value)
m.replace("apple",70);
정답
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
HashMap <String, Integer> hm = new HashMap<>();
hm.put("사이다", 1700);
hm.put("콜라", 1900);
hm.put("식혜", 2500);
hm.put("솔의눈", 3000);
// map 출력 방식 1
Set<String> iter = hm.keySet();
for(String key : iter) {
System.out.println(key+ ":" + hm.get(key));
}
// map 출력 방식 2
for(Entry<String, Integer> entry : hm.entrySet()) {
System.out.println(entry.getKey()+":"+ entry.getValue());
}
String s = bf.readLine();
if(!hm.containsKey(s)) {
return;
}
else {
int money = Integer.parseInt(bf.readLine());
if(money < hm.get(s)) {
System.out.println("돈이 부족합니다.");
}
else{
System.out.println("잔액 : " + (money-hm.get(s)) + "원");
}
}
map 메소드 중에 유용한 부분을 잘 배운 거 같고 특히 getOrdefault(key, defaultValue) 이 메소드는 유용하게 쓰일 거 같다!
Lv.3 단어 맞추기 게임
이 문제 역시 대학교 때 해봤었던 문제 같다! 조금 더 깔끔하게 문제를 풀 수 있었을거 같은데 나중에 정리해봐야 할거 같다!
public class Main {
public static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String [] s = { "eye", "book", "phone", "orange", "picture", "apple", "banana", "piche", "melon", "watermelon"};
Random r = new Random();
int a = r.nextInt(10);
boolean visited[] = new boolean[26];
String as = s[a];
char answer[] = new char[as.length()];
for(int i=0;i<as.length();i++) {
answer[i] = '_';
System.out.print(answer[i]+" ");
}
int count = 9;
int aCount = 0;
while(true) {
char c = bf.readLine().charAt(0);
boolean flag = false;
if(c>='a' && c<='z' && !visited[c-97]) {
visited[c-97] = true;
for(int i=0;i<as.length();i++) {
if(c==as.charAt(i)) {
answer[i] = c;
flag = true;
aCount++;
}
}
if(flag) {
for(int i=0;i<answer.length;i++) {
System.out.print(answer[i]+" ");
}
}
else {
System.out.println("없습니다");
count--;
}
}
if(count==0) {
System.out.println("game over");
break;
}
if(aCount==as.length()) {
System.out.println("정답!");
break;
}
}
}
}
보너스 문제 : 가위 바위 보!
역시 귀여운 가위바위보 문제!
public class Main {
public static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String rcp[] = {"가위", "바위", "보"};
String prize[] = {"꽝", "곰돌이 인형", "모자","가방","에어팟","핸드폰"};
int winCount = 0;
for(int i=0;i<5;i++) {
System.out.println("가위 바위 보 중 하나를 입력해주세요!");
Random r = new Random();
String com = rcp[r.nextInt(3)];
String user = bf.readLine();
switch(user){
case "가위" :
if(com.equals("보")) {
winCount++;
System.out.println("승리!");
}
else if(com.equals(user)) {
System.out.println("무승부!");
}
else {
System.out.println("패배!");
}
break;
case "바위" :
if(com.equals("가위")) {
winCount++;
System.out.println("승리!");
}
else if(com.equals(user)) {
System.out.println("무승부!");
}
else {
System.out.println("패배!");
}
break;
case "보" :
if(com.equals("바위")) {
System.out.println("승리!");
winCount++;
}
else if(com.equals(user)) {
System.out.println("무승부!");
}
else {
System.out.println("패배!");
}
break;
default :
System.out.println("잘못된 입력입니다!");
i--;
}
}
System.out.println("축하합니다! 총 "+winCount+" 회 승리하여 경품으로 ["+prize[winCount]+"] 을 획득하셨습니다!");
}
}
자바는 확실히 계속 코딩테스트를 공부하고 있어서 그런지 상당히 쉬웠다. 내일 부터는 코테용 알고리즘을 정리해보자!