본문 바로가기
알고리즘연습/Programmers

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

by 밈밈무 2021. 10. 15.

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

 

코딩테스트 연습 - 숫자 문자열과 영단어

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

programmers.co.kr

package Level1;
import java.util.*;
public class 숫자문자열과영단어 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(solution("one4seveneight"));
	}
	
	public static int solution(String s) {
		int answer=0;
		StringBuilder sb=new StringBuilder();
		String ans_str="";
		
		String[] words= {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
		ArrayList<String> arr=new ArrayList<>();
		for(String word:words) {
			arr.add(word);
		}
		
		for(int i=0;i<s.length();i++) {
			char c=s.charAt(i);
			
			//숫자 자체인 경우 (0~9)
			if(c>='0'&&c<='9') {
				ans_str+=c;
				continue;
			}
			
			//알파벳인 경우 
			sb.append(c);
			String str=sb.toString();
			if(arr.contains(str)) { //준비해둔 알파벳숫자의 배열에 속하는 경우 
				int index=arr.indexOf(str); //인덱스값과 알파벳숫자의 숫자값이 같으므로 indexOf을 사용 
				ans_str+=Integer.toString(index);
				sb=new StringBuilder(); //댜음 글자를 위한 StringBuilder 초기화 
			}
			
		}
		
		answer=Integer.parseInt(ans_str);
		return answer;
	}
	
	//다른사람 풀이 
	//replaceAll을 쓰면 한번에 바꿀 수 있다.
}

지저분한 거 같기도 하고... 그래도 나름 잘 풀었다고 생각했었다...

 

했었다...

 

다른 사람 풀이도 살펴보자

class Solution {
    public static int solution(String s) {
        String[] arr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        for (int i = 0; i < arr.length; i++) {
            if (s.contains(arr[i])) {
                s = s.replaceAll(arr[i], Integer.toString(i));
            }
        }
        return Integer.parseInt(s);
    }
}

그렇다...