Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 프로그래머스
- Python
- 백준
- 파이썬
- java
- hash table
- 컴포넌트
- scss
- CSS
- SasS
- dynamic programming
- computed
- 알고리즘
- 코딩테스트
- JavaScript
- Algorithm
- vue.js
- HTML
- leetcode
- math
- 자료형
- 자료구조
- 변수
- string
- JS
- array
- github
- greedy
- sorting
- JavaSceipt
Archives
- Today
- Total
Posis
[프로그래머스] 영어가 싫어요 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/120894
문제 설명
영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.
제한사항
- numbers는 소문자로만 구성되어 있습니다.
- numbers는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있습니다.
- 1 ≤ numbers의 길이 ≤ 50
- "zero"는 numbers의 맨 앞에 올 수 없습니다.
입출력 예
numbers | result |
"onetwothreefourfivesixseveneightnine" | 123456789 |
"onefourzerosixseven" | 14067 |
입출력 예 설명
입출력 예 #1
- "onetwothreefourfivesixseveneightnine"를 숫자로 바꾼 123456789를 return합니다.
입출력 예 #1
- "onefourzerosixseven"를 숫자로 바꾼 14067를 return합니다.
나의 풀이
Java
class Solution {
public long solution(String numbers) {
long answer = 0;
String[] strArr = numbers.split("");
String str = "";
String numStr = "";
for(int i = 0; i < strArr.length; i++) {
str += strArr[i];
switch(str) {
case "one":
numStr += 1;
str = "";
break;
case "two":
numStr += 2;
str = "";
break;
case "three":
numStr += 3;
str = "";
break;
case "four":
numStr += 4;
str = "";
break;
case "five":
numStr += 5;
str = "";
break;
case "six":
numStr += 6;
str = "";
break;
case "seven":
numStr += 7;
str = "";
break;
case "eight":
numStr += 8;
str = "";
break;
case "nine":
numStr += 9;
str = "";
break;
case "zero":
numStr += 0;
str = "";
break;
default:
}
}
answer = Long.parseLong(numStr);
return answer;
}
}
// 방법 2
class Solution {
public long solution(String numbers) {
long answer = 0;
String[] strArr = numbers.split("");
StringBuilder sb = new StringBuilder();
String str = "";
for(int i = 0; i < strArr.length; i++) {
str += strArr[i];
switch(str) {
case "one":
sb.append(1);
str = "";
break;
case "two":
sb.append(2);
str = "";
break;
case "three":
sb.append(3);
str = "";
break;
case "four":
sb.append(4);
str = "";
break;
case "five":
sb.append(5);
str = "";
break;
case "six":
sb.append(6);
str = "";
break;
case "seven":
sb.append(7);
str = "";
break;
case "eight":
sb.append(8);
str = "";
break;
case "nine":
sb.append(9);
str = "";
break;
case "zero":
sb.append(0);
str = "";
break;
default:
}
}
answer = Long.parseLong(sb.toString());
return answer;
}
}
// 방법 3
class Solution {
public long solution(String numbers) {
numbers = numbers.replaceAll("one", "1");
numbers = numbers.replaceAll("two", "2");
numbers = numbers.replaceAll("three", "3");
numbers = numbers.replaceAll("four", "4");
numbers = numbers.replaceAll("five", "5");
numbers = numbers.replaceAll("six", "6");
numbers = numbers.replaceAll("seven", "7");
numbers = numbers.replaceAll("eight", "8");
numbers = numbers.replaceAll("nine", "9");
numbers = numbers.replaceAll("zero", "0");
Long answer = Long.parseLong(numbers);
return answer;
}
}
처음으로 짠 코드는 방법1이지만 처리속도가 상당히 좋지않아서 여러가지로 리패터링 해봤습니다. 프로그래머스에서 알고리즘을 계속 풀면서 느낀점은 switch문은 처리속도가 많이 느리다는 것을 알게되었고 문자열을 합칠때에도 String보다는 StringBuilder가 더 좋다는 것을 알게됨
JavaScript
function solution(numbers) {
const obj = {
zero: 0,
one: 1,
two: 2,
three: 3,
four: 4,
five: 5,
six: 6,
seven: 7,
eight: 8,
nine: 9
};
const num = numbers.replace(/zero|one|two|three|four|five|six|seven|eight|nine/g, (v) => {
return obj[v];
});
return Number(num);
}
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 문자열 계산하기 (0) | 2022.12.08 |
---|---|
[프로그래머스] 종이 자르기 (0) | 2022.12.08 |
[프로그래머스] 잘라서 배열로 저장하기 (0) | 2022.12.08 |
[프로그래머스] 숨어있는 숫자의 덧셈 (2) (0) | 2022.12.08 |
[프로그래머스] 공 던지기 (0) | 2022.12.08 |