프로그래머스

[프로그래머스] 이상한 문자 만들기 - Java(자바)

nan2 2022. 8. 24. 09:55
반응형
문제설명

  • 문자열 s는 한 개 이상의 단어로 구성되어 있습니다.
  • 각 단어는 하나 이상의 공백문자로 구분되어 있습니다.
  • 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

 

제한사항

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

 

입출력 예

"try hello world" "TrY HeLlO WoRlD"

 


[ 내가 푼 방법 ]

import java.util.ArrayList;

class Solution {
    public String solution(String s) {
        String answer = "";
        String[] spaceStrs = s.split("");			//한글자씩 들어가있음
        String[] noneSpaceStrs = s.split(" ");		//단어씩 들어가있음
        
        ArrayList<Integer> spaceIdx = new ArrayList<>();
        ArrayList<String> arr = new ArrayList<>();
        
        //공백 Idx 구하기
        for (int i=0; i<spaceStrs.length; i++) {
        	if (spaceStrs[i].equals(" ")) {
        		spaceIdx.add(i);
        	}
        }
        
        //단어 홀수->소문자, 짝수와0->대문자
        for (int i=0; i<noneSpaceStrs.length; i++) {
        	char[] chars = noneSpaceStrs[i].toCharArray();
        	for (int j=0; j<chars.length; j++) {
        		if (j % 2 != 0) {
        			arr.add(String.valueOf(chars[j]).toLowerCase());
        		} else {
        			arr.add(String.valueOf(chars[j]).toUpperCase());
        		}
        	}
        }
        
        //공백 추가
        for (int i=0; i<spaceIdx.size(); i++) {
        	arr.add(spaceIdx.get(i), " ");
        }
        
        //String에 값 담기
        for (int i=0; i<arr.size(); i++) {
        	answer += arr.get(i);
        }
        
        return answer;
    }
}

단어별로 인덱스를 짝수, 홀수 구분해야하기 때문에 이중배열로 만들기로함

 

1. 문자열을 split() 함수로 쪼갠다.

→ 공백 포함하여 한 단어씩 배열로 만들고, 공백 뺀 단어별 배열로 2개를 만든다.

 

2.   공백의 index를 구하여 새로운 배열에 넣어준다.

 

3. 단어별 배열을 한 단어씩 char[] 배열에 담아주고, 짝수/홀수 구분하여 toUpperCase(), toLowerCase() 함수로 바꿔준다.

 

4. 마지막으로 공백 index의 배열을 이용해 공백을 추가해준다.

 

 

[ 다른 풀이방법 ]

	public static String solution(String s) {
        String answer = "";
        String[] strs = s.split("");			

        int cnt = 0;
        for (String str : strs) {
        	cnt = str.contains(" ") ? 0 : cnt+1;
        	answer+= cnt % 2 == 0 ? str.toLowerCase() : str.toUpperCase();
        }
        return answer;
    }

 

→ 문자열을 split() 함수로 쪼개서 String[] 배열에 담은 다음 for문을 돌린다.

이때, int cnt = 0; 이라는 변수를 선언해주고 이 cnt 변수가 index 역할을 하게된다.

for문에서 str 문자에 " " (공백)이 포함되어있으면 cnt = 0으로 초기화하고, 그렇지 않으면 cnt에 +1을 해준다.

그러면 단어별로 index가 cnt에 담기게된다.

 

그 후, cnt가 짝수 / 홀수인지 확인하여 대문자, 소문자로 변환해주면 된다.

반응형