문제
1 번째 시도
- 문자로 나왔을 때 1 번째 글자와 2 번째 글자만 보면 된다.
- ze가 나오면 0, on가 나오면 1 .....
- for문을 돌면서 i, i+1을 확인한다.
- 숫자라면 i++를 해주고
- 문자로 표현된 숫자라면 i += 문자열 길이를 해주면 된다(지금 문자가 무엇인지 확인했으므로 바로 다음 문자 확인)
import java.util.*;
class Solution {
public int solution(String s) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < s.length();) {
String present = String.valueOf(s.charAt(i));
String next = i + 1 < s.length() ? String.valueOf(s.charAt(i+1)) : "";
if(present.equals("z") && next.equals("e")){ // Use .equals() for string comparison
sb.append("0");
i += 4;
}
else if(present.equals("o") && next.equals("n")) {
sb.append("1");
i += 3;
}
else if(present.equals("t") && next.equals("w")) {
sb.append("2");
i += 3;
}
else if(present.equals("t") && next.equals("h")) {
sb.append("3");
i += 5;
}
else if(present.equals("f") && next.equals("o")) {
sb.append("4");
i += 4;
}
else if(present.equals("f") && next.equals("i")) {
sb.append("5");
i += 4;
}
else if(present.equals("s") && next.equals("i")) {
sb.append("6");
i += 3;
}
else if(present.equals("s") && next.equals("e")) {
sb.append("7");
i += 5;
}
else if(present.equals("e") && next.equals("i")) {
sb.append("8");
i += 5;
}
else if(present.equals("n") && next.equals("i")) {
sb.append("9");
i += 4;
}
else {
sb.append(present);
i += 1;
}
}
return Integer.parseInt(sb.toString());
}
}
NumberFormatException 에러가 떴다.
만약 "010"을 Integer.parseInt("010") 한다면 숫자로 변환될까? 10을 기대했지만 절대 아니다.
그러기에 예외처리를 해주어야 한다.
물론 우리 문제에서는 첫 숫자가 0인 예시를 주지 않는다 했다.
그러므로 try catch문만 작성해주면 해결 될 것이다.
2 번째 코드
import java.util.*;
class Solution {
public int solution(String s) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < s.length();) {
String present = String.valueOf(s.charAt(i));
String next = i + 1 < s.length() ? String.valueOf(s.charAt(i+1)) : "";
if(present.equals("z") && next.equals("e")){ // Use .equals() for string comparison
sb.append("0");
i += 4;
}
else if(present.equals("o") && next.equals("n")) {
sb.append("1");
i += 3;
}
else if(present.equals("t") && next.equals("w")) {
sb.append("2");
i += 3;
}
else if(present.equals("t") && next.equals("h")) {
sb.append("3");
i += 5;
}
else if(present.equals("f") && next.equals("o")) {
sb.append("4");
i += 4;
}
else if(present.equals("f") && next.equals("i")) {
sb.append("5");
i += 4;
}
else if(present.equals("s") && next.equals("i")) {
sb.append("6");
i += 3;
}
else if(present.equals("s") && next.equals("e")) {
sb.append("7");
i += 5;
}
else if(present.equals("e") && next.equals("i")) {
sb.append("8");
i += 5;
}
else if(present.equals("n") && next.equals("i")) {
sb.append("9");
i += 4;
}
else {
sb.append(present);
i += 1;
}
}
try {
return Integer.parseInt(sb.toString());
} catch (NumberFormatException e) {
throw new IllegalArgumentException("The converted string is not a valid integer: " + sb.toString());
}
}
}
성공!!
'알고리즘' 카테고리의 다른 글
항해99 TIL 7일차 (크기가 작은 부분 문자열 / 프로그래머스) (0) | 2024.04.01 |
---|---|
항해99 TIL 6일차 (삼각 달팽이 / 프로그래머스) (0) | 2024.03.31 |
항해99 TIL 4일차 (체육복 / 프로그래머스) (1) | 2024.03.29 |
항하99 TIL 3일차(바탕화면 정리/프로그래머스) (0) | 2024.03.28 |
99클럽 코테 스터디 2일차 TIL(최댓값과 최솟값 /프로그래머스) (0) | 2024.03.27 |