프로그래머스 | 문자열 나누기 (Java)

mul·2023년 2월 15일
0

알고리즘

목록 보기
21/65
post-custom-banner

🔒 문제

프로그래머스 Lv.1 연습문제 문자열 나누기

🔑 해결

문자열 s가 매개변수로 주어질 때, 문자열들을 분해하고, 분해한 문자열의 개수를 return하는 함수 solution을 작성하는 문제이다.

문제에 제시된 규칙에 따라 코드를 작성하면 되는 문제이다. 분리한 문자열을 빼고 남은 부분에 대해 과정을 반복하는 문제는 while문을 사용하여, 남은 부분이 없다면 종료하도록 하였다.

  1. 규칙에 따라 분리한 문자열을 빼고 남은 부분을 반환하는 함수 sub(String s)를 만들어, 반환받은 문자열을 s에 다시 저장하고, 분해한 문자열의 개수(answer)에 +1 한다.
    1-1. sub 함수에서 문자열 s를 받아 첫 글자(charAt(0))를 char 변수 x에 저장
    1-2. for문을 인덱스 1번부터 시작하기 때문에 x가 나온 횟수(y)를 1로, x가 아닌 다른 글자들이 나온 횟수(n)을 0으로 초기화
    1-3. for문을 돌면서 읽은 글자가 x와 같다면 y에 +1, 다르면 n에 +1
    1-4. 횟수가 같아지면(y == n), 문자열을 분리하고 남은 부분을 str에 저장한다. 남은 부분은 지금까지 읽은 부분의 다음 인덱스부터 문자열의 끝까지 나눈 것(s.substring(i+1))과 같다.
    1-5-1. 두 횟수가 같아져서 for문을 중간에 멈추고 종료했다면 str에 저장된 문자열을 return하게 되고,
    1-5-2. for문을 다 돌고(횟수가 같아지지 않고) 더 이상 읽을 글자가 없다면, 문자열을 분리하고 남은 부분이 없기 때문에, 처음 초기화한 ""를 return한다.
  2. s에 남은 부분이 없다면(s.isEmpty()) while문을 종료하고 answer를 return한다.

🔓 코드

class Solution {
    public int solution(String s) {
        int answer = 0;
        
        while (true) {
        	s = sub(s);
        	answer++;
        	if (s.isEmpty()) { // 남은 부분이 없다면 종료
        		break;
        	}
        }
        
        return answer;
    }
    private String sub(String s) {
    	String str = "";
    	
    	char x = s.charAt(0);
    	
    	int y = 1; // x가 나온 횟수
        int n = 0; // x가 아닌 다른 글자들이 나온 횟수
        for (int i = 1; i < s.length()-1; i++) {
			if (s.charAt(i) == x) {
				y++;
			} else {
				n++;
			}
			if (y == n) { // 두 횟수가 같아지면, 멈추고 문자열을 분리
				str = s.substring(i + 1);
				break;
			}
		}
        
        // 더 이상 읽을 글자가 없다면, 지금까지 읽은 문자열을 분리
        return str;
    }
}
post-custom-banner

0개의 댓글