본문 바로가기

Algorithm/알고리즘 문제

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

문제

코딩테스트 연습 - 숫자 문자열과 영단어 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 


아이디어

[러프한 아이디어]
step1) 영어 단어가 존재하는지 탐색
step2) 존재하는 위치에서 char 하나만 남기고 삭제
step3) 남은 하나의 char은 숫자로 변환

[아이디어 구현]
step 1~3를 하며 문자열 수정이 자유롭도록 StringBuilder 사용
step1) 영어 단어가 존재하는지 탐색 
         : 단어가 담긴 자료구조를 돌면서 sb.indexOf(str)를 하고, -1이 아닐 경우 step2, 3으로 넘어간다. 
step2) 존재하는 위치에서 char 하나만 남기고 삭제
         : sb.delete(start, end) 이용 / 삭제 범위는 sb.indexOf(str) + 1 ~ sb.indexOf(str) + str.length()까지
step3) 남은 하나의 char은 숫자로 변환
         : sb.setCharAt(int, char) 이용 / int를 char로 바꾸기 위해서 int + '0' 사용


코드

import java.util.*;

class Solution {
    public int solution(String s) {
        // step 0
        StringBuilder sb = new StringBuilder(s);
        List<String> numList = Arrays.asList( // 여기서 <String>을 안해주면 에러 발생
            "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine");
        int check = 1;
        
        while(check == 1){
            check = 0;
            // step 1 : 영어 단어가 존재하는지 탐색
            for(int i = 0; i < numList.size(); i++){
                int idx = 0; // 주어진 문자열에서 영단어의 위치
                if(sb.indexOf(numList.get(i)) != -1){
                    // step 2 : 존재하는 위치에서 char 하나만 남기고 삭제
                    idx = sb.indexOf(numList.get(i));
                    sb.delete(idx+1, idx + numList.get(i).length());
                    // step 3 : 남은 하나의 char은 숫자로 변환
                    sb.setCharAt(idx, (char)(numList.indexOf(numList.get(i)) + '0'));
                    check = 1;
                }
            }
        }

        int answer = Integer.parseInt(sb.toString());
        return answer;
    }
}

 


 

새롭게 알게된 것

[Stream]
스트림은 java.util.stream에 포함되므로 import java.util.*; 가 아니라 import java.util.stream.*; 를 적어줘야 한다.
❗스트림은 일회용이다. 따라서 반복문 안에 사용할 수 없다.

[List 간단하게 초기화하는 방법]
Arrays.asList( ) 을 사용하면 된다.
e.g List list = Arrays.asList("one", "two);

[int to char]
'0'을 더하고 char 형으로 받으면 된다.
e.g 
int i = 9; 
char c = i + '0'; // c=='9'

'Algorithm > 알고리즘 문제' 카테고리의 다른 글

백준 5397번 : 키로거  (0) 2023.06.25
백준 1406번 : 에디터  (0) 2023.06.24
백준 2608번 : 로마 숫자  (0) 2023.06.23
백준 1158번 : 요세푸스 문제  (0) 2023.05.16
백준 26008번 : 해시 해킹  (1) 2023.05.15