[JAVA] 컬렉션프레임워크 연습문제
Categories: JAVA-Practice
📌 개인적인 공간으로 공부를 기록하고 복습하기 위해 사용하는 블로그입니다.
정확하지 않은 정보가 있을 수 있으니 참고바랍니다 :😸
[틀린 내용은 댓글로 남겨주시면 복받으실거에요]
컬렉션 연습문제
손도 못대서 못 푼 문제는 19번, 21번.
24번은 조금 오래 걸렸음
꼭 다시 풀어보기!
19
-
입출력예시
19번은 당췌 무슨소린지 모르겠다고 생각했는데
1 2 3
HashMap<String, String> hashMap = new HashMap<String, String>(); HashMap<String, String> output = addFullNameEntry(hashMap); System.out.println(output); // --> {firstName=김, fullName=김코딩, lastName=코딩}
입출력예시인데 사실 봐도 모르겠어서 map은 key랑 value밖에없는데 어떻게 3개나 들어가지 했는데 애초에 새로 만들어진 hashmap은 이름만 들어가는 거 였음.
-
내 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14
public class S_addFullNameEntry { public HashMap<String, String> addFullNameEntry(HashMap<String, String> hashMap) { HashMap<String,String> fullName =new HashMap<>(); String a = hashMap.get("firstName"); String b = hashMap.get("lastName"); fullName.put("firstName",a); fullName.put("fullName",a+b); fullName.put("lastName",b); return fullName; } }
- 문제를 이해하고 나서는 쉽게 풀었음,
22
- username과 password로 회원이 맞는지 확인하기. / containsValue 사용금지
-
입출력예시
1 2 3
HashMap<String, String> member = new HashMap<String, String>(); boolean output = isMember(member, "parkhacker", "qwer"); System.out.println(output); // --> true
-
처음 푼 풀이
1 2 3 4 5 6 7 8 9 10 11
public class V_isMember { public boolean isMember(HashMap<String, String> member, String username, String password){ HashMap<String,String> namePass=new HashMap<>(); namePass.put(username,password); if((namePass.entrySet()).equals(member)) { return true; } return result; }
- 이제와서 보니 result를 왜 할당도 안해놓고 리턴하는지?? 모르겠음..풀다가 포기 했는 듯
- 의미 없는 풀이를 했음 ⇒ hashmap에 name이랑 password를 넣어두고는 그 값을 다시 비교하고 있기 때문에, 의미 없음
- 결국 못 풀고 집에서 다시 풀었음.
-
다시 푼 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import java.util.HashMap; public class V_isMember { public boolean isMember(HashMap<String, String> member, String username, String password) { for(String user: member.keySet()){ if(user.equals(username)){ if(member.get(user).equals(password)){ return true; } } } return false; } }
- for문 돌려서 회원정보가 들어있는 map의 key들만 모아서 key와 username을 비교한 후 같다면 get으로 키를 넣어 값과 password비교해서 같으면 true, 이외의 조건은 모두 false로 받음.
- 이렇게 풀이를 보면 쉬운데 왜 코드로 칠때는 힘든지…ㅠㅠㅠ 많이 쳐보고 생각많이 해보기
24
- key : str의 letter, value : letter의 갯수를 가지는 HashMap 반환
-
입출력예시
1 2
HashMap<Character, Integer> output = countAllCharacter("banana"); System.out.println(output); // --> {b=1, a=3, n=2}
-
내가 푼 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
import java.util.HashMap; public class X_countAllCharacter { public HashMap<Character, Integer> countAllCharacter(String str) { if(str.isEmpty()){ return null; } HashMap<Character,Integer>letter = new HashMap<>(); for(int i=0; i<str.length();i++){ Character key = str.charAt(i); if(letter.containsKey(key)){ int value = letter.get(key); letter.put(key,value+1); }else{ letter.put(key,1); } } return letter; } }
- 이거 구현하다가 코드가 살짝 복잡하고 반은 맞고 반은 틀리게 나오길래 인텔리제이 창 하나 더 열어서 콘솔 출력하면서 풀었음…ㅎ
- key가 존재한다면 해당 키의 기존값 +1, 존재하지 않으면 1로 할당.
-
근데 어짜피 다 순회돌아야해서 향상된 for문 사용하는 것이 좋음,,
1 2 3 4 5 6 7 8 9
for(char key:arr){ if(result.containsKey(key)){ int value = result.get(key); result.put(key,value+1); }else{ result.put(key,1); } }
Leave a comment