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

2025. 5. 14. 22:19·Problem Solving/프로그래머스
문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

하나의 문자열이 주어지면 그 안에서 영단어를 찾아 숫자로 파싱하여 반환해야 한다.

 

풀이

반환 값이 1 ~ 2,000,000,000의 정수로 매우 커 StringBuilder를 사용하여 반환값을 만들어줬다.

 

단순하게 문자열을 순회하면서, 숫자를 만나면 append, 숫자가 아닌 값은 switch 문에서 해당 영단어의 1~2번째 문자를 비교하며 숫자로 변환하여 append한다.

 

문자가 숫자인지 확인하는 메서드는 Character.isDigit(char)이다.

떠오르지 않아서 공식 문서를 확인해서 찾았는데, 유용한 메서드니 잘 기억해두자.

class Solution {
    public int solution(String s) {
        StringBuilder sb = new StringBuilder();
        
        int i = 0;
        while (true) {
            if (i >= s.length()) break;
            char current = s.charAt(i);
            // 현재 문자가 숫자라면 그대로 문자열에 추가
            if (Character.isDigit(current)) {
                sb.append(String.valueOf(current)); 
                i++;
                continue;
            }
            switch (current) {
                case 'z': 
                    sb.append("0");
                    i += 4;
                    break;
                case 'o':
                    sb.append("1");
                    i += 3;
                    break;
                case 't':
                    if (s.substring(i, i+2).equals("tw")) {
                        sb.append("2");
                        i += 3;
                    } else if (s.substring(i, i+2).equals("th")) {
                        sb.append("3");
                        i += 5;
                    }
                    break;
                case 'f':
                    if (s.substring(i, i+2).equals("fo")) {
                        sb.append("4");
                        i += 4;
                    } else if (s.substring(i, i+2).equals("fi")) {
                        sb.append("5");
                        i += 4;
                    }
                    break;
                case 's':
                    if (s.substring(i, i+2).equals("si")) {
                        sb.append("6");
                        i += 3;
                        break;
                    } else if (s.substring(i, i+2).equals("se")) {
                        sb.append("7");
                        i += 5;
                    }
                    break;
                case 'e':
                    sb.append("8");
                    i += 5;
                    break;
                case 'n':
                    sb.append("9");
                    i += 4;
                    break;
            }
        }
        
        return Integer.parseInt(sb.toString());
    }
}

 

다른 사람의 풀이를 보니, 대응되는 영단어 표를 배열로 선언해 for문 안에서 입력 문자열을 replaceAll 메서드를 10번 적용해 0~9까지 모든 영단어를 숫자로 변환하는 코드가 있었다.

내가 떠올린 코드와 다르게 굉장히 직관적인 코드라는 생각이 들었다..

저작자표시 비영리 동일조건 (새창열림)

'Problem Solving > 프로그래머스' 카테고리의 다른 글

[프로그래머스/Java] N진수 게임 (feat. Java 진법 변환)  (1) 2025.05.23
[프로그래머스/Java] 뉴스 클러스터링  (1) 2025.05.22
[프로그래머스/Java] 튜플  (0) 2025.05.19
[프로그래머스/Java] 캐시  (0) 2025.05.19
[프로그래머스/Java] 비밀지도  (0) 2025.05.14
'Problem Solving/프로그래머스' 카테고리의 다른 글
  • [프로그래머스/Java] 뉴스 클러스터링
  • [프로그래머스/Java] 튜플
  • [프로그래머스/Java] 캐시
  • [프로그래머스/Java] 비밀지도
friend5hip
friend5hip
개발 관련 지식이나 기록을 남기고 있습니다.
  • friend5hip
    friend5hip
    friend5hip
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 컴퓨터공학 (2)
        • 자료구조 (0)
        • 알고리즘 (1)
        • 데이터베이스 (1)
      • Problem Solving (42)
        • BOJ (25)
        • 프로그래머스 (15)
      • 언어 (2)
        • JavaScript (2)
      • 라이브러리 (12)
        • React (12)
      • 개발 (2)
      • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    구현
    집합
    BFS
    이분 탐색
    N과 M
    react
    백준
    시뮬레이션
    dp
    구간 합
    JavaScript
    백트래킹
    intersection observer
    문자열
    매개 변수 탐색
    맵
    순열
    코드트리
    java
    투 포인터
    완전 탐색
    삼성 sw 역량테스트
    프로그래머스
    dfs
    수학
    누적 합
    vite
    정렬
    소수 판별
    그리디
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
friend5hip
[프로그래머스/Java] 숫자 문자열과 영단어
상단으로

티스토리툴바