728x90

[문제링크]

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


 

class Solution {
    public String solution(String s) {
        s = s.toLowerCase();
        
        String answer = "";
        String temp = " " + s;
        
        for(int i = 1; i < temp.length(); i++){
            if(temp.charAt(i-1) == ' '){
                answer += Character.toUpperCase(temp.charAt(i));
            }
            else {
                answer += temp.charAt(i);
            }
        }

        return answer;
    }
}

 

이 문제는 공백을 기준으로(제일 처음 문자 제외)

다음 문자를 대문자로 바꾼 후, 

나머지 문자열을 소문자로 바꿔 반환하면 되는 문제이다.

 

 

접근법

  1. 문자열 s를 모두 소문자로 변환한다.
  2. 새로운 변수에 공백과 함께 문자열 s를 넣는다. (처음에 공백을 넣어줌으로써 제일 처음 문자를 대문자로 변환할 수 있다.)
  3. charAt() 메소드를 사용하여 temp 문자열을 하나씩 읽는다.
  4. 이전 문자가 공백일 때, 그 다음 문자를 대문자로 변환하고 answer 변수에 넣는다.
  5. 그렇지 않으면, 이미 소문자로 모두 변환을 해줬으므로 그냥 넣는다.

 


 

처음에는 이전 문제처럼 공백을 기준으로 나누어

배열에 넣어서 해결하려고 했으나 코드가 너무 길어지고,

생각처럼 되지 않았다.

 

지금처럼 작성하는 코드가 더 길다고 생각했으나

생각보다 길지 않았다.

 

하지만, 다른 문제 풀이를 보니 

내가 간단하게 푸는 거까지 생각 못한 것 같다.

(제출 후 다른 사람의 풀이를 보시길 바란다.)

 

또한, 위의 방법에서 어차피 else문을 작성할 것이므로

처음에 모두 소문자로 변환하는 부분을 지우고

else문에 소문자로 변환하는 것을 추가하는 것이 더 깔끔할 것 같다.

 

 


 

그리고 문제를 풀며 자주 실수했던 부분을 다시 정리하려고 한다.

바로 lengthlength() 차이이다.

 

length 

  • 데이터타입: 배열
  • 상수
  • 배열이 선언될 때 최초의 길이
  • 배열에 저장된 요소 수 ❌

 

length()

  • 데이터타입: 문자열
  • 메소드
  • String에서 호출되면 해당하는 문자 수 리턴

 

즉, temp는 String 타입 문자열이므로 length() 메소드를 사용한 것이다.

 

 

728x90

+ Recent posts