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 |