-
코딩테스트 연습 / 연습문제 / 이상한 문자 만들기알고리즘/프로그래머스 2020. 4. 13. 15:18
문제 풀이1
import java.util.StringTokenizer; public class MakeStangeString { public static String solution(String s) { String answer = ""; StringTokenizer st = new StringTokenizer(s," ",true); String[] str = new String[st.countTokens()]; StringBuilder sb = new StringBuilder(); int i = 0; while(st.hasMoreTokens()) { str[i++] = st.nextToken(); } for(i=0; i<str.length; i++) { if(str[i].startsWith(" ")) sb.append(" "); else { for(int j=0; j<str[i].length(); j++) { if(j % 2 == 0 || j == 0) sb.append(Character.toUpperCase(str[i].charAt(j))); else if(j % 2 == 1) sb.append(Character.toLowerCase(str[i].charAt(j))); } } } answer = sb.toString(); return answer; } //테스트 문자열 public static void main(String[] args) { solution("try hello world"); solution(" s d"); } }
StringTokenizer를 이용하여 문제를 푼 방법입니다.
그런데 이 문제는 StringTokenizer를 이용해서 문제를 풀 때 작은 함정이 있습니다.
StringTokenizer는 공백을 구분자로 배열을 만들어주기 때문에 공백이 몇개가 들어가던 상관없이 하나로 인식되어 " s d"와 같은 문자열이 들어오면 각각 s와 d로 분리되어 토큰이 2개만 생기게 됩니다.
그러나 이 문제는 공백이 여러개더라도 그 공백개수 마저 있는 그대로 출력을 해야합니다.즉, 문자열의 길이가 고정되어야 한다는 전제가 깔려있습니다.
그럼 StringTokenizer를 어떻게 활용해야 될까요?
StringTokenizer st = new StringTokenizer(String str, String delim, boolean returnDelims);
다음과 같은 생성자를 이용하시면 됩니다.
이 생성자는 구분자도 토큰으로 간주하는 기능을 추가합니다.많은 분들이 split()함수를 사용하여 문제를 풀었지만 split()함수가 많이 느리다고 하여 StringTokenizer를 이용해 보았습니다.
확실히 Token만큼만 for문을 돌기때문에 성능이 향상 됬을 수도 있지만 여전히 공백 여러개를 하나의 토큰으로 묶지 못한 부분에 대한 아쉬움이 남아있습니다.문제 보기
히스토리 보기
'알고리즘 > 프로그래머스' 카테고리의 다른 글
코딩테스트 연습 / 연습문제 / 정수 내림차순으로 배치하기 (1) 2020.04.14 코딩테스트 연습 / 연습문제 / 자릿수 더하기 (0) 2020.04.13 코딩테스트 연습 / 연습문제 / 소수 찾기 / JAVA (1) 2020.04.10 코딩테스트 고득점 kit / 완전탐색 / 소수 찾기 (0) 2020.04.10 코딩테스트 고득점 kit / 완전탐색 / 모의고사 / JAVA (1) 2020.04.10