본문 바로가기
Algorithm/CODINGBAT[Java]

CodingBat Map-2

by 씨니 2021. 9. 28.
728x90

CodingBat문제 map 두번째. 

이건 map 첫번째 문제보다 좀 어려웠다..

 

1. word0

배열 내 모든 서로 다른 문자열을 key로 가지고 값이 0인 Map<String, Integer>를 반환해라.

public Map<String, Integer> word0(String[] strings) {
  Map<String, Integer> map = new HashMap<>();
  for(int i = 0; i < strings.length; i++){
    if(!map.containsKey(strings[i])){
      map.put(strings[i],0);
    }
  }
  return map;
}

 

2. wordLen

문자열 배열에서 서로다른 문자열을 key로 가지고 key의 값은 문자열의 길이로 갖는 Map<String, Integer>를 반환해라.

public Map<String, Integer> wordLen(String[] strings) {
  Map<String, Integer> map = new HashMap<>();
  for(int i = 0; i < strings.length; i++){
    if(!map.containsKey(strings[i])){
     map.put(strings[i], strings[i].length()); 
    }
  }
  return map;
}

 

3. pairs

비어있지 않은 문자열들로 이루어진 문자열 배열에서 각 문자열 문자의 가장 앞 문자를 key로 가지고 가장 마지막 문자를 value로 가지는 Map<String,String>을 출력해라.

public Map<String, String> pairs(String[] strings) {
  Map<String, String> map = new HashMap<>();
  for(int i = 0; i < strings.length; i++){
    map.put(strings[i].substring(0,1), strings[i].substring(strings[i].length()-1));
  }
  return map;
}

 

4. wordCount

하나의 문자열 배열에서 서로 다른 문자열을 key로 가지고, 그 문자열이 배열에서 나오는 갯수를 value값으로 가지는 Map<String, Integer>를 출력해라.

public Map<String, Integer> wordCount(String[] strings) {
  Map<String, Integer> map = new HashMap<>();
  for(int i = 0; i < strings.length; i++){
    if(map.containsKey(strings[i])){
      map.put(strings[i], map.get(strings[i])+1);
    }else{
      map.put(strings[i], 1);
    }
  }
  return map;
}

 

5. firstChar

비어있지않은 문자열로 이루어진 배열에서 문자열 맨앞의 문자를 key로 가지고, 그 문자로 시작하는 문자열을 value로 가지는 map<String,String>을 반환해라. (맨앞 문자가 같다면, key가 같은 문자열을 합쳐 map에 저장해라.)

public Map<String, String> firstChar(String[] strings) {
  Map<String, String> map = new HashMap<>();
  
  for(int i = 0; i < strings.length; i++){
    String k = strings[i].substring(0,1);
    if(map.containsKey(k)){
      map.put(k, map.get(k) + strings[i]);
    }else{
      map.put(k, strings[i]);
    }
  }  
  return map;
}

 

6. wordAppend

문자열 배열에서 같은 문자열이 2번, 4번, 6번..등으로 나타날때 그 결과를 합쳐서 출력해라.

같은 문자열이 2번, 4번, 6번 나타나지 않는다면 반환하지 않는다.

public String wordAppend(String[] strings) {
  String s = "";
  Map<String, Integer> map = new HashMap<>();
  for(int i = 0; i < strings.length; i++){
    String k = strings[i];
    if(map.containsKey(k)){
      map.put(k, map.get(k) + 1);
      if(map.get(k) % 2 == 0){
        s += k;
      }
    }else{
      map.put(k, 1);
    }
  }
  return s;
}

 

7. wordMultiple

문자열배열이 주어진다. 문자열 배열에서 서로 다른 문자열은 key이고, 문자열 배열에서 key와 같은 문자열이 2번이상 나온다면 value는 true이고, 그렇지 않으면 false를 value로 가지는 Map<Key, Value>를 출력해라.

public Map<String, Boolean> wordMultiple(String[] strings) {
  Map<String, Boolean> map = new HashMap<>();
  for(int i = 0; i < strings.length; i++){
    if(map.containsKey(strings[i])){
      map.put(strings[i], true);
    }else{
      map.put(strings[i], false);
    }
  }
  return map;
}

 

8. allSwap

만약 문자가 비어있지 않고, 문자열의 맨 처음 문자가 같다면 "match"라고 부른다.

만약 먼저나온 문자열과 "match"하는 문자열 나온다면, 두 문자열 배열의 위치를 바꾼다.

문자열의 위치가 바뀐 배열은 더이상 match하지 않은것으로 다음 문자랑 비교할수 없다.

바뀐 문자열 배열을 출력해라.

public String[] allSwap(String[] strings) {
  Map<String, Integer> map = new HashMap<>();

  for(int i = 0; i < strings.length; i++){
    String key = strings[i].substring(0,1);
    if(map.containsKey(key)){
      String s = strings[i];
      strings[i] = strings[map.get(key)];
      strings[map.get(key)] = s;
      map.remove(key);
    }else{
      map.put(key, i);
    }
  } 
  return strings;
}

 

9. firstSwap

만약 문자가 비어있지 않고, 문자열의 맨 처음 문자가 같다면 "match"라고 부른다.

만약 먼저나온 문자열과 "match"하는 문자열 나온다면, 두 문자열 배열의 위치를 바꾼다.

같은 첫번째 문자(key)는 딱 한번 배열이 바뀔 수 있다. 따라서 key값으로 한번 들어와 배열의 위치가 바뀌면 그 이후로 같은 key값이 나오는 문자는 위치를 바꿀 수 없다.

public String[] firstSwap(String[] strings) {
  Map<String, Integer> map = new HashMap<>();
  for(int i = 0; i < strings.length; i++){
    String key = strings[i].substring(0,1);
    if(map.containsKey(key)){
      if(map.get(key) != -1){
        String s = strings[i];
        strings[i] = strings[map.get(key)];
        strings[map.get(key)] = s;
        map.put(key, -1);
      }
    }else{
      map.put(key, i);
    }
  }
  return strings;
}
728x90

'Algorithm > CODINGBAT[Java]' 카테고리의 다른 글

CodinBat Array-1  (0) 2021.10.04
CodingBat Map-1  (0) 2021.09.28
CodingBat String-1  (0) 2021.09.27
CodingBat Warmup-2  (0) 2021.09.27
CodingBat Warmup-1  (0) 2021.09.27