2020. 12. 4. 16:56ㆍ알고리즘/프로그래머스
- 문제 설명
- 문제풀이
- 문제를 보고 처음 생각든것은 공백기준 단어별로 끊어 인덱스를 계산해야 하는것을 확인하고 공백을 Split(공백)함수를 이용하여 끊어 읽어올 생각을 했다. 하지만 코드를 작성하고 테스트케이스는 성공했지만 처음부터 공백기준으로 짤라 저장했기 때문에 문제 마지막 과정에 다시 String변환 하고난 뒤 문자 뒤 공백이 잘리는 사태가 일어났다. ex)world (공백)-> WoRiD(공백이 잘림)
public class StrangeNumber {
public String solution(String s) {
String answer = "";
s = s.toLowerCase();
String[] change = s.split("");
int cnt = 0;
for(int i=0; i<change.length; i++) {
if(change[i].equals(" ")) {
answer += " ";
cnt = 0;
}else {
if(cnt%2==0) {
answer += change[i].toUpperCase();
cnt++;
}else {
answer += change[i];
cnt++;
}
}
}
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
StrangeNumber sn = new StrangeNumber();
System.out.println(sn.solution("try hello world"));
}
}
그래서 생각 해냇것은 "try hello world"라는 문자열을 하나단위로 잘라 하나씩 비교해주는 과정을 생각했다. 이렇게 되면 나머지 공백도 유지가 돼어 출력되기 때문이다.
그리고 이문제의 keypoint는 cnt라는 int형 변수를 주어 각 단어가 들어있는 배열의 index가 증가할때마다(try에서 hello로 넘어갈때는 공백을 마주칠때과 같다.) 각 단어의 index를 제어해주는 변수가 cnt가 된다. cnt를 사용해 index를 초기화시켜주지 않는다면 이중for문을 사용하여 단어 하나를 구성하고있는 문자 index를 제어할 순 있다.
초반에 s = s.toLowerCase();를 해준 이유는 문제 string이 대문자 소문자가 섞여있을때 전체 string을 소문자로 변환한 후 과정을 걸쳐 나가면 더 간편해진 코드를 구현할 수 있을거 같았다. 위 코드를 보면 for문안에 cnt가 홀수일때는 대소문자 변환메서드를 쓰지 않고 값을 그대로 유지시킬 수 있다.
- 사용 메서드
- String toUpperCase()
: 해당 문자열을 대문자로 변환. ex)String s="abc"; -> s.toUpperCase(); -> System.out.println(s) -> ABC
- String toLowerCase()
: 해당 문자열을 소문자로 변환. ex)String s="ABC"; -> s.toUpperCase(); -> System.out.println(s) -> abc
- public String[] split(String regex)
regex = 문자열을 구분하기 위한 정규 표현식 또는 특정문자.
: split 함수는 입력받은 정규표현식 또는 특정문자를 기준으로 문자열을 나누어(잘라) 배열에 변환하여 리턴한다.
- 함수의 대한 자세한 내용은 오른쪽 상단 "Java" 텝에서 보실 수 있습니다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스: Lv1. 콜라츠 추측 (0) | 2021.01.07 |
---|---|
프로그래머스: Lv1. 크레인 인형뽑기 게임 (0) | 2020.12.06 |
프로그래머스: Lv1. 최대공약수와 최소공배수 (0) | 2020.12.03 |
프로그래머스: Lv1. 두 개 뽑아서 더하기 (0) | 2020.11.27 |