[프로그래머스] Lv.0 영어가 싫어요 (ArrayList, replace)

Dev.Dana·2024년 10월 18일
0

Algorithm

목록 보기
2/25
post-thumbnail

문제 설명

주어진 문자열 numbers는 “zero”, “one”, “two”, “three”, “four”, “five”, “six”, “seven”, “eight”, “nine”로 구성된 소문자 영단어들이 공백 없이 나열되어 있습니다. 이 문자열을 실제 숫자로 변환하는 문제를 해결하려고 합니다.

문제 조건

•	numbers는 소문자로만 구성됩니다.
•	“zero”는 맨 앞에 올 수 없습니다.
•	문자열의 길이 1 ≤ numbers의 길이 ≤ 50 입니다.

문제 해결 전략

숫자 영단어를 실제 숫자로 변환하는 문제!! 해결 전략은 아래와 같다.

1.	해시맵 또는 리스트로 영단어와 숫자 매핑:
	•	“zero”부터 “nine”까지의 영단어를 리스트에 저장하고, 이들을 각각 0부터 9까지의 숫자로 매핑
    
2.	replace()를 사용하여 문자열 대체:
	•	문자열 numbers에서 각 영단어를 찾아 그에 해당하는 숫자로 변환
	•	문자열 대체를 위해 자바의 replace() 메서드를 사용하여 각 영단어를 대응하는 숫자로 변환
    
3.	최종적으로 숫자로 변환:
	•	변환된 문자열을 Long.parseLong()을 사용해 long 타입의 숫자로 변환

여기 내 소스에 사용한 건 일단 ArrayList이다. HashMap을 사용해볼까도 했는데...
애초에 영어 -> 숫자로 바꾸는거니 ArrayList를 이용해서 index를 그대로 가져다 쓰면 괜찮을 것 같다는 생각이 들었다.

import java.util.*;

class Solution {
    public long solution(String numbers) {
        long answer = 0;
        
        // 숫자 영단어를 리스트에 저장
        List<String> arrayList = new ArrayList<>();
        arrayList.add("zero");
        arrayList.add("one");
        arrayList.add("two");
        arrayList.add("three");
        arrayList.add("four");
        arrayList.add("five");
        arrayList.add("six");
        arrayList.add("seven");
        arrayList.add("eight");
        arrayList.add("nine");
        
        // 영단어를 숫자로 변환
        for(int i = 0; i < arrayList.size(); i++) {
            numbers = numbers.replace(arrayList.get(i), Integer.toString(i));
        }
        
        // 변환된 숫자를 long으로 변환하여 반환
        return Long.parseLong(numbers);
    }
}

코드 설명

1.	리스트 초기화:
	•	"zero"부터 "nine"까지의 숫자 영단어를 List<String>에 저장
2.	replace() 메서드 사용:
	•	numbers 문자열에서 영단어를 숫자로 대체
3.	Long.parseLong()으로 숫자 변환:
	•	최종적으로 변환된 문자열을 Long.parseLong(numbers)를 통해 long 타입으로 변환해 반환
    

-> 가끔 아예 반환형을 바꿔서 제출해도 인정되는 사이트가 있던데.. 코테 풀 때 그렇게 풀어도 되는지는 모르겠다.

profile
어제의 나보단 나은 오늘의 내가 되기를

0개의 댓글