Problem

문자열 s는 한 개 이상의 단어로 구성되어 있고, 각 단어에는 하나 이상의 공백문자로 구분되어 있을 때, 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 solution 구축 (제한 사항: 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단) 문제 보러가기

What I tried

나의 전략은 아래와 같았다:

  1. s에 들어오는 문자열을 공백기준 따로 따로 만들기 {"try hello world"} -> {try, hello, world}
  2. s.arr에 들어가있는 단어들의 인덱스 번호 찾기
  3. if문을 사용하여 인덱스번호가 % 2 == 0 일경우 대문자로 else 소문자로 변경

What was Wrong?

해당 문제를 풀면서 내가 얼마나 변수를 생성하는 것이 부족한지 알았다. 변수를 어디에 어떻게 만들어야하는지 아직 감이 잘 오지 않는것 같다. 해당 코드를 아래와 같이 작성하였다.

class Solution {
    public String solution(String s) {
        String str = s;
        String[] words = str.split("");

        for (int i = 0; i < s.length(); i++) {
            if (i % 2 == 0){ //even일 경우 대문자
                words[i] = str.toUpperCase();  //어떻게 인덱스에 값을 대문자로 바꿔주나...
            } else {
                words[i] = str.toLowerCase();
            }
        }

        String answer = str;
        return answer;
    }
}

가장 큰 문제는 2가지였다.

  1. 위에 주석을 보면 해당 부분에서 str.toUpperCase로 바꿔준 이 값을 어디에 어떻게 넣어줘야하는지 한참을 해맸다.
  2. String 안에 공백을 두고 단어의 첫번째 알파벳이 index 0이 되어야하는데 if 문에 해당 내용은 빠졌다.

What I Learned

class Solution {
    public String solution(String s) {
        String answer = "";
        String[] str = s.split("");
        
        int idx = 0;
        for(int i=0; i<str.length; i++) {
            if(str[i].equals(" ")) {
                idx = 0;
            } else if(idx % 2 == 0) {
                str[i] = str[i].toUpperCase();
                idx++;
            } else {
                str[i] = str[i].toLowerCase();
                idx++;
            }
            answer += str[i];
        } 
        
        return answer;
    }
}

해당 코드와 제일 큰 차이점은 idx라는 index박스를 생성하여 0도 세팅하고 UpperCase와 LowerCase를 넣어주었다. 해당 문제를 풀면서 아래와 같이 배울 수 있었다.

1. .split()

split에는 두가지 종류가 있다.

  1. public String[] split(String regex)
  2. public String[] split(String regex, int limit)

1번 메서드의 경우 제한없이 모든 부분 문자열을 반환한다.

예시)

String string_1="JavaProgram";
System.out.println(Arrays.toString(s.split("a")));

2번 메서드의 경우 분할된 부분 문자열의 수가 제한된 경우 사용이 되며, limit인수는 반환할 배열의 길이를 제한한다.

예시) String s = "Spencer Plaza, New York, USA";
String[] data = s.split(",", 2);
System.out.println("Name = "+data[0]); // Spencer Plaza
System.out.println("Address = "+data[1]); //New York,USA

2. toUpperCase(); / toLowerCase();

toUpperCase();와 toLowerCase();는 문자열을 대문자 혹은 소문자로 변환해 반환한다.

3. 변수 만들기

이 부분이 코딩 작성에 있어 나의 가장 큰 문제점이라는 것을 깨달았다. 변수 만드는 것에 두려움을 갖지말자. 어디에 작성하던 일단 작성하고 오류가 나면 고쳐보자!

profile
Think out of the Box

0개의 댓글