replace 활용하기
숫자 문자열과 영단어 : Level1
https://school.programmers.co.kr/learn/courses/30/lessons/81301
처음 작성한 코드
import java.util.*;
class Solution {
public int solution(String s) {
HashMap<String, Integer> wordToNum = new HashMap<>() {{
put("zero", 0);
put("one", 1);
put("two", 2);
put("three", 3);
put("four", 4);
put("five", 5);
put("six", 6);
put("seven", 7);
put("eight", 8);
put("nine", 9);
}};
StringBuilder numStr = new StringBuilder();
StringBuilder currWord = new StringBuilder();
for (char c : s.toCharArray()) {
if (Character.isDigit(c)) {
numStr.append(c);
} else {
currWord.append(c);
if (wordToNum.containsKey(currWord.toString())) {
numStr.append(wordToNum.get(currWord.toString()));
currWord.setLength(0);
}
}
}
return Integer.parseInt(numStr.toString());
}
}
=>
HashMap<String, Integer> wordToNum = new HashMap<>() {{
put("zero", 0);
put("one", 1);
put("two", 2);
put("three", 3);
put("four", 4);
put("five", 5);
put("six", 6);
put("seven", 7);
put("eight", 8);
put("nine", 9);
}};
ㄴ HashMap 은 HashMap<String, Integer> wordToNum = new HashMap<>() 으로 선언한다.
ㄴ 중괄호를 두 개 사용한 부분은 초기화 블록(Initialization Block)이라 불리는 것으로, 익명 클래스(Anonymous Class)의 인스턴스 초기화 블록이다. 이 방식은 인스턴스 초기화 시에 코드 블록을 실행할 수 있게 해준다.
자바에서 익명 클래스는 중괄호로 둘러싸인 초기화 블록을 사용하여 인스턴스를 초기화할 수 있다. 따라서 위의 코드에서 중괄호는 HashMap을 초기화하고, put 메서드를 사용하여 키-값 쌍을 추가하는 작업을 수행한다.
다른 사람 풀이
class Solution {
public int solution(String s) {
String[][] mapArr = { {"0", "zero"},
{"1", "one"},
{"2", "two"},
{"3", "three"},
{"4", "four"},
{"5", "five"},
{"6", "six"},
{"7", "seven"},
{"8", "eight"},
{"9", "nine"} };
for(String[] map : mapArr){
s = s.replace(map[1], map[0]);
}
int answer = Integer.parseInt(s);
return answer;
}
}
ㄴ HashMap 을 사용하지 않고 2차원 배열을 사용해도 됐다.
class Solution {
public int solution(String s) {
String[] strArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for(int i = 0; i < strArr.length; i++) {
s = s.replace(strArr[i], Integer.toString(i));
}
return Integer.parseInt(s);
}
}
ㄴ 이렇게 간결한 풀이로 풀린다니,,,, 내가 너무 어렵게 생각했던 것 같다. 그저 replace 을 통해 strArr[i] 의 값을 모두 Integer.toString(i) 값으로 변경해주면 되는 것을...!!!
문제점 : 카카오 문제라고 하니 쫄았(?)던 것 같다. 쉽게 해결 할 수 있는 문제였는데....
해결 방법 : 다른 사람의 풀이를 참고하여 공부하였다.
깨달은 바 : 너무 어렵게 생각하지 말고, 쉬운 풀이부터 차근차근 생각해보는 게 좋을 것 같다.
'코딩테스트 > programming_JAVA' 카테고리의 다른 글
[Java] 프로그래머스_42748 : K번째수 (0) | 2023.12.15 |
---|---|
[Java] 프로그래머스_12915 : 문자열 내 마음대로 정렬하기 (0) | 2023.12.15 |
[Java] 프로그래머스_68935 : 3진법 뒤집기 (2) | 2023.12.05 |
[Java] 프로그래머스_12906 : 같은 숫자는 싫어 (2) | 2023.12.05 |
[Java] 프로그래머스_12940 : 최대공약수와 최소공배수 (0) | 2023.12.04 |