[알고리즘]

99클럽 코테 스터디 2일차 TIL : 문자열 처리, HashMap

danhan 2024. 7. 25. 01:38

오늘의 학습 키워드

  • 문자열 처리
  • 맵핑을 통한 변환
  • Java의 문자열 메서드 사용

공부한 내용 본인의 언어로 정리하기

오늘은 문자열 내에 일부 숫자를 영단어로 바꾼 문자열을 원래 숫자로 되돌리는 문제를 해결했습니다. 이를 위해 영단어와 숫자의 맵을 만들어서 문자열 내의 영단어를 대응하는 숫자로 치환하는 방법을 배웠습니다. Java의 HashMap을 활용해 영단어와 숫자를 매핑하고, replace 메서드를 이용해 문자열을 변환했습니다.


오늘의 회고

어떤 문제가 있었고, 나는 어떤 시도를 했는지
문자열 내에 숫자와 영단어가 혼합되어 있는 경우 이를 정확히 숫자로 변환하는 문제였습니다. 처음에는 숫자가 아닌 문자를 숫자로 변환하기 위해 반복문과 조건문을 사용하려 했습니다. 숫자가 아닌 문자를 만나면 이를 변환해 숫자로 바꾸려고 시도했습니다.

class Solution {
    public int solution(String s) {
        String answer = "";
        String number = "0123456789";
        
        for (char x : s.toCharArray()) {
            String digit = String.valueOf(x);
            
            // 숫자가 아니면 변환
            if (!number.contains(digit)) {
                // 로직 생략
            }

            // 숫자를 answer에 추가
            answer += digit;
        }

        return Integer.parseInt(answer);
    }
    
    private String convertToNum(String word) {
        // 변환 로직 
        return "";
    }
}

 

어떻게 해결했는지
보다 효율적인 접근 방법으로 영단어와 숫자의 매핑을 HashMap에 저장하고, 주어진 문자열을 순회하면서 영단어를 숫자로 변환하는 방법을 사용했습니다. 이를 통해 각 영단어를 대응하는 숫자로 쉽게 치환할 수 있었습니다.

 
import java.util.HashMap;
import java.util.Map;

class Solution {
    public int solution(String s) {
        Map<String, String> numMap = new HashMap<>();
        numMap.put("zero", "0");
        numMap.put("one", "1");
        numMap.put("two", "2");
        numMap.put("three", "3");
        numMap.put("four", "4");
        numMap.put("five", "5");
        numMap.put("six", "6");
        numMap.put("seven", "7");
        numMap.put("eight", "8");
        numMap.put("nine", "9");
        
        StringBuilder result = new StringBuilder();
        
        StringBuilder word = new StringBuilder();
        for (char ch : s.toCharArray()) {
            if (Character.isDigit(ch)) {
                result.append(ch);
            } else {
                word.append(ch);
                if (numMap.containsKey(word.toString())) {
                    result.append(numMap.get(word.toString()));
                    word.setLength(0);
                }
            }
        }
        
        return Integer.parseInt(result.toString());
    }
}

 

무엇을 새롭게 알았는지
영단어와 숫자의 매핑을 HashMap을 사용하여 쉽게 처리할 수 있음을 배웠습니다. 또한, 문자열을 변환하는 replace 메서드를 활용하면 더욱 간단하게 문제를 해결할 수 있음을 알게 되었습니다.

 

내일 학습할 것은 무엇인지
java 문자열 처리