ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 - 문자열 나누기
    알고리즘 2023. 2. 5.
    반응형

     

    내 풀이

    단순히 문제에서 요구하는 내용을 그대로 읽어 내려가듯이 풀었다.

     

    포인트는 첫 글자 세팅을 반복문 밖에서 하느냐 안에서 하느냐에 따른 방법의 차이 하나와

    남은 글자 처리 방안이다. 나는 i 와 s의 길이 사이에서 범위를 벗어나게 되면 에러가 떨어지니까 에러가 떨어지지 않게끔 반복문을 제때 탈출하는게 중요하다.

    그 방법으로 i가 문자열 s의 총 길이 보다 1글자수 적을때 answer을 증가 시키고 탈출 하는 것 이다.

    문제에서 요구하는건 어차피 단어로 자르는 것이니까 문자열 s를 끝까지 돌릴 필요는 없는 것이다.

    public int solution(String s) {
            int answer = 0;
            int x_cnt = 0;
            int other_cnt = 0;
            char x = '0';
            
            for(int i=0; i<s.length(); i++) {
                // 남은 글자 처리 (최대 글자수 전인 상태면 마지막 분리할 글자이니까)
                if(i == s.length() - 1) {
                    answer++;
                    break;
                }
                // 첫 글자 x 세팅
                if(x_cnt == 0) {
                    x = s.charAt(i);
                    x_cnt++;
                } else {
                    // x가 아닌 글자 세팅
                    char x2 = s.charAt(i);
                    // 두 글자 비교
                    if(x == x2) {
                        x_cnt++;
                    } else {
                        other_cnt++;
                    }
                }
                // 카운팅 비교
                if(x_cnt == other_cnt) {
                    answer++;
                    x_cnt = 0;
                    other_cnt = 0;
                }
                
            }
            
            return answer;
        }

     

     

    다른 사람 풀이

    여기서는 x와 x가 아닌 글자가 같을때 같지 않을때의 카운팅 방법을 각각 변수로 계산한게 아니라

    count라는 변수 하나로 한꺼번에 한 모양

    같을때는 증가시키고 다를땐 감소 시켜서 결국에 다시 0이 되었다는건 x와 x가 아닌 글자가 나온 수 가 같다는 것 

    public int solution2(String s) {
    		int answer = 0;
    		int count = 0;
    		char x = '0';
    		
    		for(int i=0; i<s.length(); i++) {
    			if(i == s.length() - 1) {
    				answer++;
    				break;
    			}
    			if(count == 0) {
    				x = s.charAt(i);
    				count++;
    			} else {
    				char x2 = s.charAt(i);
    				if(x == x2) {
    					count++;
    				} else {
    					count--;
    				}
    			}
    			
    			if(count == 0) {
    				answer++;
    			}
    		}
            
    		return answer;
        }

     

    다른 사람 풀이 (최다 좋아요)

    class Solution {
    
        public int solution(String s) {
            char prev = '1';
            int same = 0, different = 0, answer = 0;
            for (char c : s.toCharArray()) {
                if (prev == '1') {
                    prev = c;
                    same++;
                    answer++;
                } else if (prev == c) {
                    same++;
                } else {
                    different++;
                }
    
                if (same == different) {
                    prev = '1';
                    same = 0; different = 0;
                }
            }
    
            return answer;
        }
    }

     

    반응형

    댓글 0

Designed by Hyeok