📝 TIL
- [프로그래머스] 81301 숫자 문자열과 영단
제한사항
1 ≤ s의 길이 ≤ 50
s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
입출력 예
입출력 예 #1
s | result |
"one4seveneight" | 1478 |
"23four5six7" | 234567 |
"2three45sixseven" | 234567 |
🦔 설계 및 시도
처음에 map으로 넣을까 하다가 put 을 10번 쓰기가 귀찮아서
String 배열을 생성한 후 값을 넣었다.
1. String[] 배열에 zero~ten 넣기
(만약 중간에 숫자가 비어있거나, 랜덤값이라면 map을 사용해야함)
2. replace() 메서드를 사용하여 변환
위 방식을 사용하였는데, 에러가 발생했다.
❌ 에러 코드
s = s.replace(num[i], i);
처음에 replace(String, int) 형식으로 작성했었는데,
replace의 두번째 값에는 int를 넣을 수가 없었다!
🔥 풀이에 사용된 개념
String.replace(String target, String replacment)
- 문자열에서 특정 부분(target)을 찾아 다른 문자열로 치환(replacement)함
- 모든 일치 항목을 바꾸고, target과 replacement는 모두 문자열(String)이어야 한다
- 만약, 처음 하나만 바꾸고 싶다면? replaceFirst()
Interger.parseInt(String s)
- 문자열 형태의 숫자를 정수(int)로 변환하는 메서드
- 만약 문자열이 숫자로 변환할 수 없다면? NumberFormatException
💡 풀이 소스 코드
시간복잡도 : O(m) / 숫자 단어 배열 길이 : 10, 길이가 m인 문자열에서 대
공간복잡도 : O(1)
public int solution(String s) {
String[] num = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for (int i = 0; i < num.length; i++) {
s = s.replace(num[i], Integer.toString(i));
}
return Integer.parseInt(s);
}
🚀 새로 배운 내용
- 문자열 자체가 숫자라면, int 형으로 변환할 수 있고 방법은 Integer.parseInt(String s)
- 반대로 숫자를 그냥 문자열로 변환한다면? Integer.toString(int n)
- 객체를 문자열로 바꿀 때는? String.valueOf(int n)
😺 느낀점
- replace()를 거의 안 써본 거 같은데, 쓰니까 확실히 문자열을 치환할 때 편하다!
- 숫자 배열 -> 인덱스 연결은 자주 나오니 잘 기억해두자.
- 처음에 향상된 for문으로 작성하여 indexOf를 사용해야 하나? 생각했는데,
인덱스를 사용할 때는 향상된 for문보다 일반 for문이 더 활용하기 좋다!
*소스 코드는 다음 깃허브에 올라옵니다 - https://github.com/s0ooo0k/Algorithm_Study
GitHub - s0ooo0k/Algorithm_Study: Algorithm Study 문제 및 풀이
Algorithm Study 문제 및 풀이. Contribute to s0ooo0k/Algorithm_Study development by creating an account on GitHub.
github.com
'TIL > 알고리즘' 카테고리의 다른 글
[JAVA] 프로그래머스 | 12915 문자열 내 마음대로 정렬하기 (0) | 2025.04.02 |
---|---|
[JAVA] 프로그래머스 | 181913 문자열 여러 번 뒤집기 (0) | 2025.04.02 |
[JAVA] 프로그래머스 | 181945 문자열 돌리기 (0) | 2025.04.01 |
[CS] 시간복잡도와 공간복잡도 (0) | 2025.03.31 |
[JAVA] 181934 조건 문자열 | 문자열 메서드 | split() (0) | 2025.02.06 |