본문 바로가기
알고리즘

항해99 TIL 5일차 (숫자 문자열과 영단어 / 프로그래머스)

by 순원이 2024. 3. 30.

문제             

 

프로그래머스

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

programmers.co.kr

 

 

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());
        }
    }
}

 

 

성공!!