https://school.programmers.co.kr/learn/courses/30/lessons/81301
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제푸는데 30분정도 걸렸습니다.
다른사람 코드보고 효율적 방법
1. String s = "1248"이 있을떄
나는 수작업으로 1248을 구했지만
return Integer.parseInt(s); 를 하면 자동으로 변환됩니다.
2.replaceAll("one,two,three 같은것들", "1,2,3,4.. 대응되는 숫자들")을
class Solution {
public int solution(String s) {
int answer = 0;
StringBuilder sb = new StringBuilder("");
int len = s.length();
String[] digits = {"0","1","2","3","4","5","6","7","8","9"};
String[] alphabets = {"zero","one","two","three","four","five","six","seven","eight","nine"};
for(int i=0; i<10; i++){
s = s.replaceAll(alphabets[i],digits[i]);
}
return Integer.parseInt(s);
}
}
이문제에서 기억해야할점들
첫번쨰. String builder 사용법
- 원래 String을 다 char형으로 변경해서 하는 방식들을 생각해봤는데 그런것보다도 String을 조작할 수 있는 String builder로 진행하는 것이 훨씬 효율적입니다.
StringBuilder 사용법 블로그입니다.
https://codevang.tistory.com/121
java.lang.StringBuilder (문자열) 주요 메소드 [1/2]
StringBuilder와 StringBuffer 클래스도 String 클래스와 같이 문자열을 다루는 클래스입니다. 다만, String 클래스가 문자열을 생성자로 넣어 인스턴스를 한 번 생성하고 나면 인스턴스가 가진 문자열 값
codevang.tistory.com
두번쨰. 아스키코드를 통한 char 문자숫자를 int형 숫자로 변환.
char a = '8' 일떄 아스키코드상 56입니다. 이떄 '0'은 48이므로 56 - 48 하면 8이 나옵니다.
그러므로
int temp = a - '0' 을 해주면 모든 숫자들이 int형 숫자로 변경됩니다.
import java.util.*;
import java.io.*;
class Solution {
static char[] to_char;
static String answer_str = new String();
public int solution(String s) {
StringBuilder builder = new StringBuilder(s);
for(int i=0;i<builder.length();i++){
if( builder.charAt(i) >= '0' && builder.charAt(i) <= '9'){
continue;
}else if( builder.charAt(i) >= 'a' && builder.charAt(i) <= 'z'){
//zero는 한가지이므로 한개만 처리.
if(builder.charAt(i) == 'z'){
builder.delete(i, i+4);
builder.insert(i, "0");
}
// one,
else if(builder.charAt(i) == 'o'){
builder.delete(i, i+3);
builder.insert(i, "1");
}
// two, three
else if(builder.charAt(i) == 't'){
if(builder.charAt(i+1) == 'w'){
builder.delete(i, i+3);
builder.insert(i, "2");
}
else if(builder.charAt(i+1) == 'h'){
builder.delete(i, i+5);
builder.insert(i, "3");
}
}
//four, five ,
else if(builder.charAt(i) == 'f'){
if(builder.charAt(i+1) == 'o'){
builder.delete(i, i+4);
builder.insert(i, "4");
}
else if(builder.charAt(i+1) == 'i'){
builder.delete(i, i+4);
builder.insert(i, "5");
}
}
//six, seven
else if(builder.charAt(i) == 's'){
if(builder.charAt(i+1) == 'i'){
builder.delete(i, i+3);
builder.insert(i, "6");
}
else if(builder.charAt(i+1) == 'e'){
builder.delete(i, i+5);
builder.insert(i, "7");
}
}
//eight
else if(builder.charAt(i) == 'e'){
if(builder.charAt(i+1) == 'i'){
builder.delete(i, i+5);
builder.insert(i,'8');
}
}
//nine
else if(builder.charAt(i) == 'n'){
if(builder.charAt(i+1) == 'i'){
builder.delete(i, i+4);
builder.insert(i,'9');
}
}
}
}
System.out.println(builder.toString());
int answer = 0;
for(int i=builder.length()-1;i>=0;i--){
int tenmultiple = 1;
int temp = 0;
char test = builder.charAt(i);
temp = test - '0';
for(int j=i;j<builder.length()-1;j++){
tenmultiple *= 10;
}
temp *= tenmultiple;
System.out.println(temp);
answer += temp;
}
// int answer = 0;
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[카카오 기출 문제] 괄호 변환 - 레벨 2,구현 + 문자열 (0) | 2022.10.05 |
---|---|
[카카오 기출 문제] 크레인 인형뽑기 - 레벨 1, 구현 (0) | 2022.09.05 |
[카카오 기출 문제] 키패드 누르기 - 레벨 1, 구현 + 문자열 (0) | 2022.09.05 |
[카카오 기출 문제] 신규 아이디 추천 - 레벨 1, 구현 + 문자열 (0) | 2022.09.04 |
[카카오 기출 문제] 신고 결과 받기 - 레벨 1, 구현 + 문자열 (0) | 2022.09.03 |