본문 바로가기
코딩테스트/etc.

countAllCharacters

by GGShin 2022. 5. 18.

문자열을 입력받아 문자열의 각 letter를 key로 갖고 letter가 등장하는 횟수를 value로 갖는 HashMap<Character, Integer> 를 return 하는 문제. (입력받은 문자열이 빈 문자열인 경우에는 return null)

예시. "apple" 을 입력받았다면 {a = 1, p = 2, l = 1, e = 1} 을 반환

 

나의 풀이 

또 다시 완전 탐색과 double for loop으로..ㅎㅎ

그래도 나름대로 중복된 key는 갖지 않는 Map의 특성을 이용했다는 점에서, 그 동안 사용해 보지 않은 새로운 방식을 하나 이용했다는 게 성장점인 것 같다. 물론 return type 자체가 HashMap인 것도 있지만!

public HashMap<Character, Integer> countAllCharacter(String str) {
        
    
        //TODO..
        if(str.isEmpty()) {
            return null;
        }
        char[] charArr = str.toCharArray();
        int[] duplicatesArr = new int[charArr.length];

        //등장 횟수 찾기
        for(int j = 0; j < charArr.length; j++) {
            int count = 0;
            for(int a = 0; a < charArr.length; a++) {
                if(charArr[j] == charArr[a]) {
                    count += 1;
                }
            }
            duplicatesArr[j] = count;
        }

        //Return 할 HashMap 만들기
        HashMap<Character, Integer> answer = new HashMap<>();
        for(int i = 0; i < charArr.length; i++) {
            answer.put(charArr[i], duplicatesArr[i]);
        }
        return answer;
    }

언어 마다 내장 method를 잘 알고 있으면 조금 더 편하게 알고리즘을 구성할 수 있는 것 같다. 

 

아래는 다른 풀이인데,

key가 이미 사용되고 있는 key인지 아닌지 여부를 확인하고 그에 따라 나누어 코드를 작성하였다.

 

public HashMap<Character, Integer> countAllCharacter(String str) {
    if (str.isEmpty()) {
      return null;
    }
    HashMap<Character, Integer> hashMap = new HashMap<>();

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

      if (hashMap.containsKey(curChar)) {
				//key가 이미 있는 경우에는 value에 +1을 해주어 count를 높여주는 효과를 줌
        int value = hashMap.get(curChar);
        hashMap.put(curChar, value + 1);
      } else {
				//key가 없는 경우에는 key를 넣어주고 초기 value로 1을 넣어줌
        hashMap.put(curChar, 1);
      }

    }
    return hashMap;
  }

single for loop이기 때문에 훨씬 속도가 빠를 것이라 예상된다.

 


시사점

  1. String에는 .charAt(i)을 사용해서 i번째 index에 있는 character를 반환받는 method가 있다.
  2. hashMap에 해당 key가 없는 경우에는 key를 넣어주고 value를 1로 넣어줌.
  3. hashMap에 해당 key가 이미 있는 경우에는 value에 +1을 해주어 count를 높여주는 효과를 줌.
반응형

'코딩테스트 > etc.' 카테고리의 다른 글

LSCS 구하기  (0) 2022.07.28