본문 바로가기

카테고리 없음

프로그래머스-LEVEL1-문자열 나누기

맨처음 while문으로 접근하였는데 이렇게 할 경우 해결법도 매우 복잡해질뿐더러 런타임도 너무 길어서 불가능한 풀이라는걸 꺠달았다.

사실 이런 배열에 관한 문제는 대부분 for문을 통하여 배열의 길이만큼 순회하여서 해결이 가능한데 이번에 사용한 사고는

banana라는 단어 즉 배열이 있다고 생각을 해보자.그렇다면 for문으로 banana의 길이만큼 순회하면서 isSame의 값이 0이라면 ba라는 한개의 쪼개진 값이 나오므로 answer값이 1증가하고 charAt을 사용해서 비교군 char인 first의 값을 업데이트해준다.이렇게 접근한다면 b부터 시작하여서 맨처음 나오는 값은 a이다 a는 b와는 다르기떄문에 else을 거쳐서 isSame값이 1감소 즉 isSame이 0이된다.이대로i는 1이 증가,isSame의 값이 0이므로 if문의 조건을 만족하였으므로 비교군char인 first의 값을 업데이트 해준다. 이런식으로 배열의 길이만큼 순회한다면 만약 abababa 즉 마지막에 한글자만 남는다면 어떤 일이 발생할까? ababab는 조건에 따라 처리되어 3이라는 answer값을 보유할 것이다.그리고 a가 되면 이전의ab의 결과에 따라서 현재상태에서의 isSame의 값은 0이다.하지만 isSame값이 0임에 따라 answer가 ++되고 더이상의 for문 순회는 없으므로 하나남은 단어에 대한 처리가 완료된다.

마지막 단어가 하나일경우에 대한 처리가 골치 아픈 문제이다.하지만 배열에 대해서 어느정도 인지를 한다면(String은 배열이라고 생각하면 편하다) 보다 쉽게 접근이 가능한 문제였다.

 

풀이

class Solution {
    public int solution(String s) {
        int answer = 1;
        int length = s.length();
        int isSame=1;
        char first=s.charAt(0);
        for(int i=1; i<length; i++){
            if(isSame==0){
                answer++;
                first=s.charAt(i);
            }
            
            if(first==s.charAt(i)){
                isSame++;
            }
            else{
                isSame--;
            }
        }

        return answer;
    }
}