본문 바로가기
부트캠프/백

11.11 컬렉션 연습문제

by 티코딩 2022. 11. 14.

1번부터 23번까지는 수월하게 풀었는데 24번이 정말 어려웠다. 블로깅을하며 다시한번 이해해 봐야겠다.

 

문제 : 문자열을 입력받아 문자열을 구성하는 각 문자(letter)를 키로 갖는 HashMap을 리턴해야 합니다. 각 키의 값은 해당 문자가 문자열에서 등장하는 횟수를 의미하는 int 타입의 값이어야 합니다.

출력 : <Character, Integer> 타입을 요소로 갖는 HashMap을 리턴해야 합니다.

주의사항 : 빈 문자열을 입력받은 경우, null을 리턴해야 합니다.

수도코드를 작성해본다.

import java.util.*;
public class Blank {
    public HashMap<Character, Integer> countAllCharacter(String str) {
        HashMap<Character, Integer> hashMap = new HashMap<>();
        // str순회
        //str.charAt(i)가 hashMap에 이미 있다면, 기존의 값을 1증가 시켜주기
        ///그렇지 않다면, 새로운 엔트리를 만들어주기 -> str.charAt(i)가 키, 1을 값으로 가지는 엔트리
    }
}

처음에 접근했던 방법은 저번 반복문때 풀었던 문제에서 사용했던 방법으로 이중for문을 사용해,

중복을 체크하고 count에 1씩추가해주는 방법이었는데,

그러다보니 한번나온 글자는 카운트가 되지 않는다는 문제가 생겼었다.

먼저 str순회하는 코드를 작성해본다.

for(int i=0; i < str.length(); i++){
    char character = str.charAt(i);

0부터 입력받는 str의길이만큼 반복한다.

char 타입의 character에다 str(0)번째부터 끝까지 순회한다.

 

다음으로 str.charAt(i)가 hashMap에 있다면 1을 증가시키는 코드를 작성한다.

if (hashMap.containsKey(character)){
    hasMap.put(character, hashMap.get(character) + 1);
}

containsKey(key) -주어진 키가 있으면 true, 없으면 false를 리턴함.

put(key, value) - 주어진 키로 값을 저장합니다. 해당 키가 새로운 키일 경우 null을 리턴하지만, 동일한 키가 있을 경우에는 기존의 값을 대체하고 대체되기 이전의 값을 리턴함.

get(key)- 주어진 키에 해당하는 값을 리턴함.

 

위에서 character 에다가 str 한글자씩 대입했기 때문에 있으면 +1을 해준다.

 

다음으로 아닌경우, 새로운 엔트리 만들어주는 코드를 작성한다.

else hashMap.put(character, 1);

이코드가 한개만있을때 즉, 중복되지않을때 그 키에 값으로 1을 넣는것이다. 내가 막혔던 부분이 이거였다.

return str.isEmpty() ? null :hashMap;

isEmpty() - 컬렉션이 비어 있는지 확인함.

마지막으로 반환값으로 비어있으면 null을 반환하고 아니면 위에서 만든 hashMap을 반환한다.

 

다른분께서 처음 내가 시도했던 이중 for문을 사용해서 푸셨다하셔서 레퍼런스로 코드를 받아왔다.

if(str.length()==0) return null;

HashMap<Character, Integer> hashMap = new HashMap<>();

for(int i=0 ; i<str.length(); i++){
    int count = 0;
    for(int j=0; j<str.length(); j++){
        if(str.charAt(i)==str.charAt(j)) count++;
    }
    hashMap.put(str.charAt(i), count);
}
return hashMap;

내용만 가져왔다.

 

 

 

 

'부트캠프 > ' 카테고리의 다른 글

11.15 스레드1, JVM  (0) 2022.11.16
11.14 Annotation, Lambda, Stream  (0) 2022.11.14
11.10 enum, 제네릭, 예외, 컬렉션 프레임워크  (0) 2022.11.14
11.8 다형성 추상화  (0) 2022.11.09
11.7 상속, 캡슐화  (0) 2022.11.07