본문 바로가기
코딩 문제/프로그래머스 [ Java ]

[ 프로그래머스 / Java ] 숫자 문자열과 영단어

by CODESIGN 2022. 7. 15.

https://school.programmers.co.kr/learn/courses/30/lessons/81301

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제 설명


네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

  • 1478 → "one4seveneight"
  • 234567 → "23four5six7"
  • 10203 → "1zerotwozero3"

이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.

숫자


숫자 영단어
0 zero
1 one
2 two
3 three
4 four
5 five
6 six
7 seven
8 eight
9 nine

 

제한사항


  • 1 ≤ s의 길이 ≤ 50
  • s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
  • return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.

 

 

입출력 예


s result
"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

 

입출력 예 설명


입출력 예 #1

  • 문제 예시와 같습니다.

입출력 예 #2

  • 문제 예시와 같습니다.

입출력 예 #3

  • "three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
  • 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.

입출력 예 #4

  • s에는 영단어로 바뀐 부분이 없습니다.

 

 

풀이


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.io.*;
import java.util.*;
class Solution {
    static int tenth;
    static String[] arr;
    public int solution(String s) {
        Stack<Integer> stack = new Stack<>();
        int cnt = 0;
        int answer =0;
        for(int i=0; i<s.length(); i++) {
            int check = s.charAt(i) - '0';
            if(check >= 0 && check <= 9) {
                stack.push(check);
            } if (i == s.length()-1) {
                break;
            } else if (s.substring(i, i+2).equals("ze")){
                stack.push(0);
                i += 3;
            } else if (s.substring(i, i+2).equals("on")){
                stack.push(1);
                i += 2;
            } else if (s.substring(i, i+2).equals("tw")){
                stack.push(2);
                i += 2;
            } else if (s.substring(i, i+2).equals("th")){
                stack.push(3);
                i += 4;
            } else if (s.substring(i, i+2).equals("fo")){
                stack.push(4);
                i += 3;
            } else if (s.substring(i, i+2).equals("fi")){
                stack.push(5);
                i += 3;
            } else if (s.substring(i, i+2).equals("si")){
                stack.push(6);
                i += 2;
            } else if (s.substring(i, i+2).equals("se")){
                stack.push(7);
                i += 4;
            } else if (s.substring(i, i+2).equals("ei")){
                stack.push(8);
                i += 3;
            } else if (s.substring(i, i+1).equals("ni")){
                stack.push(9);
                i += 2;
            }
        }
        tenth = 1;
        int size = stack.size();
        for (int i=0; i<size;i++) {
            answer += stack.pop() * tenth;
            tenth *=10;
        }
        return answer;
    }
}
cs

 

나는 너무 어렵게 풀었었다...

훨씬 쉬운 답안을 찾았다.

 

1
2
3
4
5
6
7
8
9
10
11
class Solution {
    public int solution(String s) {
 
    String[]  num= {"0","1","2","3","4","5","6","7","8","9"};
    String[] word= {"zero" , "one" , "two" , "three" , "four" , "five" , "six" , "seven" , "eight" , "nine"};
        for (int i = 0 ; i <10 ; i++){
            s = s.replace(word[i] , num[i]);
        }
        return Integer.parseInt(s);
    }
}
cs

 

 

댓글