본문 바로가기
Coding Test/Programmers

[프로그래머스] 문자열나누기(Lv1) - Java

by lucas_owner 2022. 12. 7.

문제

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

 


문제 분석 & 이해

해당 문제는 문제 설명그대로 진행하면 되는걸로 이해했다. 

 

- 주어진 문자열 s 를 단어 하나씩 이동해가며 다음 문자와 비교.

- 문자와 그다음 문자가 같다면 '같은글자' +1 

- 문자와 비교할 문자가 다르다면? '다른글자' +1

- 같은글자와 다른글자가 같다면 문자열을 분리한다.

    -> 결과에 +1 해준다고 생각하면 된다. 지난 문자열은 비교할 필요가 없기 때문이다!

 

(예외 케이스!)

위의 분석처럼 진행 한다면,,, 실행은 되지만 예외가 있기 때문에 실행 결과가 다르게 나온다. 

1. 더이상 비교가 불가하다면 결과에 +1  ---> (분리된후 문자열이 존재하기 때문.)

2. 혹은 결과가 0이라면 문자열 자체를 return 해야 하므로 결과에 +1 

 

입출력 예시

s result
"banana" 3
"abracadabra" 6
"aaabbaccccabba" 3

Solution

1-1 : one의 값이 ' ' 이면 문자열의 i 번 문자 저장.

1-2 : 저장한 문자와, 비교 문자가 같으면 same++; , 다르면 diff++; 

1-3 : 두 횟수가 같아지면 result++; 후 모든 값을 초기화 (문자열을 분리하였기 때문에 다음 문자부터 다시 연산해야 하기 때문)

2-1 : same과 diff가 같지않고 더 이상 글자가 없을 때 result++ (for loop가 종료된 후.)

3-1 : 만약 문자열이 분해되지 않았다면 1 return


Code

public int solution(String s) {
		int result = 0;
		
		char one = ' ';
		int same = 0;
		int diff = 0;
		
		
		for(int i=0; i<s.length(); i++) {
			// 1-1
			if(one == ' ') {
				one = s.charAt(i);
			}
			
			// 1-2
			if(one == s.charAt(i)) {
				same++;
			}else {
				diff++;
			}
			
			// 1-3
			if(same == diff) {
				result++;
				one = ' ';
				same = 0;
				diff = 0;
			}
		}
		
		// 2-1
		if(same != 0) {
			result++;
		}
		
		// 3-1
		//return 
		if(result == 0) {
			result = 1;
		}
		
		
		return result;
	}

 

틀린점이나 수정할 부분, 혹은 더 좋은 솔루션 공유는 언제든 환영입니다!!! 

댓글에 자유롭게 말씀해주세요~

 

출처 : 프로그래머스(programmers)

반응형

댓글