본문 바로가기
알고리즘/프로그래머스

[프로그래머스 / 문자열 나누기 / JAVA ]

by KDW999 2023. 1. 12.

https://school.programmers.co.kr/learn/courses/30/lessons/140108#qna

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 접근

문제를 잘못 해석해서 처음에 풀이가 완전 다른 쪽으로 나아갔다.

핵심은 첫 문자 x와 x가 아닌 문자들의 횟수를 세야한다는 거다. [ 분해된 문자열에서도 다시 그 첫 문자를 기준으로 x와 x가 아닌 문자들로 나뉜다. ]

첫 문자 x는 시작부터 횟수가 1올라가니 xCount에 1을 넣고 시작했다.

문자열의 첫 문자도 firstWord 변수에 대입하고 for문이 0부터 시작하지 않도록 했다.

xCount와 dxCount가 같아지면 for문을 바로 빠져나가고 xCount, dxCount를 합친 수 만큼 s문자열을 자름

ex) s = s.substring(2) → 문자열 s의 인덱스 0부터 1까지 자르고 남은 부분을 s에 다시 넣음

남은 문자열이 1개인 경우도 while 반복문 처음으로 돌아가서 answer++ 시켜주고 for문에서 조건이 맞지않아 실행되지 않으며, 마지막 substring에서 문자열 길이는 0이되고 while문을 빠져나가 answer를 return 시켜준다.

class Solution {
    
    public int solution(String s) {
         int answer = 0;
            
         while(s.length()>=1) {
        	 
        answer++; // "분해한" 문자열의 갯수를 구해야 된다.
        // 한 번 분해하면 문자열은 2개가 되기에 처음에 먼저 1더해주고 시작한다.

        int xCount = 1; // 첫 글자니까 1부터 시작
        int dxCount = 0;
        char firstWord = s.charAt(0);
        
        for(int i=1; i<s.length(); i++) {
        	 // 첫 글자(x) 박고 시작
        	
        	if(s.charAt(i) == firstWord) xCount++;
        	else dxCount++;
        	
        	if (xCount == dxCount)  break;
        
        }
        s = s.substring((xCount+dxCount)); // 남은 문자가 1개일 경우 반복문은 돌아가지 않기에 반복문 밖에 작성
     
      }
        return answer;
    }
}

댓글