정처기 실기로 고통받는 와중에 알고리즘 푸는 게 더 재밌어
그리고 그걸 또 블로그에 정리한다? 더 재밌어...
눈물 흘리다..
😇 Map에서 값을 뽑아내려면 어떻게 하는지 알아보자.
그럼 본론으로.
Map에서 값을 추출하자
Map<String, String> animal = new HashMap<>();
animal.put("노랑","원숭이");
animal.put("그레이","코뿔소");
animal.put("황토","기린");
animal.put("자주","치타");
animal.put("하늘","고래");
for(String key : animal.keySet()){
System.out.println(String.format("key: %s, value: %s", key, animal.get(key)));
}
// key: 그레이, value: 코뿔소
// key: 자주, value: 치타
// key: 하늘, value: 고래
// key: 황토, value: 기린
// key: 노랑, value: 원숭이
잠깐 💡
hashMap은 코드상으로 순차적 key/value를 넣어도 순서가 보장되지 않는다
key로 value 값을 추출하려면
for문안에 조건을 걸어주면 된다.
for(String key : animal.keySet()){
if(key.equals("그레이")){
System.out.println( String.format("key: %s, value: %s", key, animal.get(key)));
}
}
value로 key 추출하려면
조건에 바꿔서 걸어주면 되겠지요 ???
자 이제 문제를 풀어볼까요?
프로그래머스 120838 - 모스 부호(1)
[문제]
머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해 보세요.
모스부호는 다음과 같습니다.
morse = {
'.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
'--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
'--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
'...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
'-.--':'y','--..':'z'
}
[나의 풀이]
저는 이렇게 계획했습니다.
1. letter는 공백을 기준 잘라서 배열을 만들자
2. 모스부호를 HashMap에 넣고
3. letter배열을 for문으로 돌려 모스부호 map의 key값과 비교하여 일치하면 stringbuilder에 추가
4. 스트링 빌더 toString으로 문자열 만들어 리턴
public class Solution {
public String solution(String letter){
String answer = "";
String[] splitLetter = letter.split(" ");
Map<String, String> morse = new HashMap<>();
morse.put(".-","a");
morse.put("-...","b");
morse.put("-.-.","c");
morse.put("-..","d");
morse.put(".","e");
morse.put("..-.","f");
morse.put("--.","g");
morse.put("....","h");
morse.put("..","i");
morse.put(".---","j");
morse.put("-.-","k");
morse.put(".-..","l");
morse.put("--","m");
morse.put("-.","n");
morse.put("---","o");
morse.put(".--.","p");
morse.put("--.-","q");
morse.put(".-.","r");
morse.put("...","s");
morse.put("-","t");
morse.put("..-","u");
morse.put("...-","v");
morse.put(".--","w");
morse.put("-..-","x");
morse.put("-.--","y");
morse.put("--..","z");
StringBuilder sb = new StringBuilder();
for(int i = 0; i < splitLetter.length; i++){
for(String key : morse.keySet()){
if(splitLetter[i].equals(morse.get(key))){
sb.append(splitLetter[i]);
}
}
}
answer = sb.toString();
return answer;
}
}
엥...? 왜 값이 안 들어가지
if문 안에 .get(key) 그러니까 모스부호splitLetter[i]랑 알파벳(morse map의 value값 ㅎ)이 같냐고 하니까
당연히 같은 게 없으니까 답이 안 나오지
(+ 그 바로 아래 sb.append(splitLetter [i]) 이것도 아니었음)ㅋㅋㅋ
다시 !!!!
[통과한 코드]
class Solution {
public String solution(String letter){
String answer = "";
String[] splitLetter = letter.split(" ");
Map<String, String> morse = new HashMap<>();
morse.put(".-","a");
morse.put("-...","b");
morse.put("-.-.","c");
morse.put("-..","d");
morse.put(".","e");
morse.put("..-.","f");
morse.put("--.","g");
morse.put("....","h");
morse.put("..","i");
morse.put(".---","j");
morse.put("-.-","k");
morse.put(".-..","l");
morse.put("--","m");
morse.put("-.","n");
morse.put("---","o");
morse.put(".--.","p");
morse.put("--.-","q");
morse.put(".-.","r");
morse.put("...","s");
morse.put("-","t");
morse.put("..-","u");
morse.put("...-","v");
morse.put(".--","w");
morse.put("-..-","x");
morse.put("-.--","y");
morse.put("--..","z");
StringBuilder sb = new StringBuilder();
for(int i = 0; i < splitLetter.length; i++){
for(String key : morse.keySet()){
if(splitLetter[i].equals(key)){
sb.append(morse.get(key));
}
}
}
answer = sb.toString();
return answer;
}
}
오예
'오늘 이거 알았네요 > Java' 카테고리의 다른 글
[Java] 정수 내림차순으로 정렬 (0) | 2023.05.14 |
---|---|
[Java] 근삿값 알고리즘(Near Algorithm) (0) | 2023.05.06 |
[Java] Int 또는 Integer(Primitive)타입의 List를 배열로 (0) | 2023.04.08 |
[Java] Int를 Stream에 넣어 intArray로 바꾸다 (0) | 2023.04.07 |
[Java] 반환 값 OptionalInt를 int로 바꾸려면 (0) | 2023.04.05 |