-
프로그래머스 - 이상한 문자 만들기 [자바]Algorithms/- 프로그래머스 2022. 2. 2. 11:09
- 문제 링크 : 이상한 문자 만들기
코딩테스트 연습 - 이상한 문자 만들기
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을
programmers.co.kr
정답
class Solution { public String solution(String s) { String[] arr = s.split(""); int idx = 0; for(int i=0; i<arr.length; i++){ if(" ".equals(arr[i])){ idx = 0; continue; } if(idx % 2 == 0){ arr[i] = arr[i].toUpperCase(); idx++; }else{ arr[i] = arr[i].toLowerCase(); idx++; } } StringBuilder sb = new StringBuilder(); for(String str : arr){ sb.append(str); } return sb.toString(); } }
분석
문제가 좀 잘 못 되었다.
단어별 대소문자 변환해서 리턴하라고만 설명이 되어있는데
공백이 하나 이상 들어가 있고 공백까지 모두 포함해서 동일하게 return해줘야한다.
그래서 split(" ")로 해결하려고 하면 절대 해결되지 않고split("")으로 분리한 후 단어별 index를 지정하여 풀어야 한다.
참고할 만한 정답
class Solution { public String solution(String s) { String answer = ""; int cnt = 0; String[] array = s.split(""); for(String ss : array) { cnt = ss.contains(" ") ? 0 : cnt + 1; answer += cnt%2 == 0 ? ss.toLowerCase() : ss.toUpperCase(); } return answer; } }
비교 분석
- 위 정답을 보니까 굳이 기존 배열에 넣고 나중에 for문을 할 필요가 없어보인다.
비교 분석 반영
class Solution { public String solution(String s) { String[] arr = s.split(""); StringBuilder sb = new StringBuilder(); int idx = 0; for(int i=0; i<arr.length; i++){ if(" ".equals(arr[i])){ idx = 0; sb.append(arr[i]); continue; } if(idx % 2 == 0){ sb.append(arr[i].toUpperCase()); idx++; }else{ sb.append(arr[i].toLowerCase()); idx++; } } return sb.toString(); } }
반응형