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

·2023년 1월 25일
0

프로그래머스

목록 보기
29/59

📌 문제 설명

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

📌 제한 사항

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

📌 입출력 예

sreturn
"try hello world""TrY HeLlO WoRlD"

📌 코드

import java.util.*;

class Solution {
    public String solution(String s) {
        String answer = "";
        int index = 0;
        for(int i = 0; i < s.length(); i++){
            if(s.substring(i, i+1).equals(" ")) {
                answer = answer.concat(" ");
                index = 0;
            }
            else {
                if(index % 2 == 0 && Character.isLowerCase(s.charAt(i))){
                    answer = answer.concat(s.substring(i, i+1).toUpperCase());
                    index++;
                }
                else if(index % 2 == 1 && Character.isUpperCase(s.charAt(i))){
                    answer = answer.concat(s.substring(i, i+1).toLowerCase());
                    index++;
                }
                else {
                    answer = answer.concat(s.substring(i,i+1));
                    index++;
                }
            }
        }
        return answer;
    }
}

📌 문제 해결 과정

💡 반복문을 s의 길이만큼 돌리면서 substring()으로 한 문자씩 잘라 주는데 만약 자른 문자가 공백이라면 그대로 answer에 concat()으로 연결시켜 주었다

💡 index는 단어를 대문자 혹은 소문자로 바꿀 때 그 단어의 인덱스를 확인하기 위한 변수이다 자른 문자가 공백일 때는 별다른 인덱스가 필요하지 않으니 0으로 초기화시켜 준다 만약 자른 문자가 단어의 알파벳일 때, 짝수 인덱스 문자가 대문자이거나 홀수 인덱스가 소문자라면 별다른 처리 없이 concat()으로 answer에 연결시켜 주며 다음 인덱스의 문자를 확인하기 위해 index만 +1 해 준다 만약 짝수 인덱스일 때 자른 문자가 소문자라면 대문자로 바꾼 후 answer에 연결시켜 주며, 홀수 인덱스일 때 자른 문자가 대문자라면 소문자로 바꾼 후 answer에 연결을 시켜 준다 이 경우들 또한 다음 인덱스의 문자를 위해 index에 +1을 해 주게 된다

나는 이 점수를 주는 기준이 무엇인지 궁금하다... 🤔 이 문제는 여기에 첨부한 코드를 짜는 데는 정말 몇 분 안 걸렸지만 고민을 꽤 많이 했던 문제이다 처음엔 StringTokenizer로 풀었는데 그럼 공백의 처리가 애매해져서 처음에 제출했을 때 하나 빼고 다 실패였었다... 그리고 split도 사용해 보려고 했는데 split을 이용해 푸는 데에 딱히 아이디어가 떠오르지 않아서 실패한 이유를 토대로 여기 첨부한 코드처럼 그냥 단순 조건문만 이용해서 짜 보았다 하지만 이 문제에 대한 힌트에 split을 사용하라는 걸 보면 아무래도 split을 사용했어야 좀 더 나았을까 싶다...

profile
공부는 많은 양을 하진 않더라도 꾸준히 매일 하기

0개의 댓글