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;
}
'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 |