IT's 우

[java, 프로그래머스숫자] 2021 카카오 채용연계형 인턴십> 문자열과 영단어, replace("","") 본문

알고리즘/프로그래머스

[java, 프로그래머스숫자] 2021 카카오 채용연계형 인턴십> 문자열과 영단어, replace("","")

디우 2022. 10. 26. 00:25
728x90

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

 

프로그래머스

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

programmers.co.kr

 

일단 문제...풀이에 앞서...내코드는 끔찍하니.. 뒤에 코드도 확인... 내 코드는.. 그냥... 끔찍.... 남 코드는... 너무 어이없...... 컄 갱타나

 

보지 마세요 내 코드

 

보지마세요 내 코드
class Solution {
    public int solution(String s) {
        char[] arr=s.toCharArray();
        
        String result="";
        String num="";
        for(char c:arr){
            //숫자인지 확인 숫자 0은 유니코드 값 49~ 숫자 9 유니코드 값 57
            if(c>=48 && c<=57){
                if(num!=""){
                    
                    result+=check(num);
                    num="";
                }
        
                result+=c;
            
            }else{
                num+=c;
            }
        }
         if(num!=""){  //마지막에 문자로 끝났을 때 확인
                  
                    result+=check(num);
                    num="";
                }
        int answer = Integer.parseInt(result);
        return answer;
    }
    
    private static String check(String num){
       	int len = num.length();
		int point = 0;
		String result = "";
		while (len > 0) {
          
			if (num.charAt(point) == 'z') { // zere
				point += 4;
				len -= 4;
				result += '0';
				continue;
			} else if (num.charAt(point) == 'o') {// one
				point += 3;
				len -= 3;
				result += '1';
				continue;
			} else if (num.charAt(point) == 't') {// two, three
				if (num.charAt(point + 1) == 'w') {// two
					point += 3;
					len -= 3;
					result += '2';
					continue;
				} else { // three
					point += 5;
					len -= 5;
					result += '3';
					continue;
				}

			}else if (num.charAt(point) == 'f') {//four, five
				if (num.charAt(point + 1) == 'o') {// four
					point += 4;
					len -= 4;
					result += '4';
					continue;
				} else { // five
					point += 4;
					len -= 4;
					result += '5';
					continue;
				}

			}else if (num.charAt(point) == 's') {//seven,six
				if (num.charAt(point + 1) == 'e') {// seven
					point += 5;
					len -= 5;
					result += '7';
					continue;
				} else { // six
					point += 3;
					len -= 3;
					result += '6';
					continue;
				}

			}else if (num.charAt(point) == 'e') {// eight
				point += 5;
				len -= 5;
				result += '8';
				continue;
			} else {//nine
				point += 4;
				len -= 4;
				result += '9';
				continue;
			}
		}
		return result;
                   
        }
    }

 

보지마세요 내 풀이

일단 첫 번째 생각 숫자는 그냥 숫자로, 문자는 숫자로 바꾸기

-> 문자를 숫자로 확인하기 유니코드 사용, 숫자 0의 유니코드는 48, 숫자 9의 유니코드는 57이므로 48 이상 57 이하는 숫자이므로 숫자면 그냥 붙여줌. 그래도 여기서 알아 갈 수 있는 거. 문자를 숫자로 확인할 때 유니코드 사용.

 

if(c>=48 && c<=57){

 

-> 처음에 풀 때 문자를 그냥 하나씩 확인하여 switch문으로 확인해줬다. 그러면 생기는 문제는 문자가 예: eightseven 이런 식으로 붙어있을 때 읽지.. 못하여 여기서부터 파국. 메서드 check()에서 point와 문자로 읽은 string의 길이를 사용하여 숫자를 하나 읽을 때마다 len의 길이를 다 읽을 때까지 point를 옮기며 ...노가다로 읽어줬다. 그냥 문제를 풀 때 실제 코테에서 시간 안에 푸는 것이 중요하다고 생각해서 노가다를 시도하는데 이렇게..노가다를 하면 현타는.. 풀고 나서 다른 사람 코드를 보고 기절했다. 밑에는 다른 사람 코드. 

 


이거 보세요 남 코드 기절한다 박지우

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

풀이: 그냥 문자면 숫자로 바꿔줌..

728x90
반응형