코테/프로그래머스

[프로그래머스/Lv. 1] 문자열 나누기

imname1am 2023. 3. 11. 16:22
반응형

🔺 문제

 

프로그래머스

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

programmers.co.kr

 

🔺 코드

 

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

구현

velog.io

import java.util.*;

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

후엥... 쉬워보이는데 왜 이해하기 어려운지,,,

나는 약간 substring 써야하나ㅡ 라는 생각을 했었는데 거의 안 쓰고 푸셔서 내가 많이 부족하구나 싶었다,.

 


🔺 다른 풀이들

 

프로그래머스

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

programmers.co.kr

1) 풀이

public class Solution {
    public int solution(String s) {
        int answer = 0;
        char init = s.charAt(0);
        int count = 0;
        
        for (char c : s.toCharArray()) {
            if (count == 0) init = c;
            
            if (init == c)   count++;
            else             count--;
            
            if (count == 0) answer++;
        }

        // 남아있는 글자 처리
        if(count > 0) {
            answer++;
        }
        return answer;
    }
}

갯수 세는 변수를 하나만 사용하신,,,!

 

2) 풀이

class Solution {
    public int solution(String s) {
        int answer = 0;

        char firstChar = 0;
        int cntY = 0;
        int cntN = 0;

        for (char c : s.toCharArray()) {
            if (firstChar == 0) firstChar = c;
            
            if (c == firstChar) cntY++;
            else                cntN++;
            
            if (cntY == cntN) {
                cntY = cntN = firstChar = 0;
                answer++;
            }
        }
        
        // 남아있는 글자 처리
        if (firstChar != 0) answer++;

        return answer;
    }
}

 

이거는 변수 2개 사용하셨는데 위랑 흐름은 비슷함

 

3) 풀이

class Solution {
public int solution(String s) {
        int answer = 0;

            Character x = s.charAt(0);
            int xCnt = 0;
            int yCnt = 0;
            int i;

            for (i = 0; i < s.length(); i++) {
                if (x.equals(s.charAt(i))) xCnt++;
                else yCnt++;
                
                if (xCnt == yCnt) {
                    s = s.substring(i + 1);

                    if(s.length() > 1) {
                        answer++;
                        xCnt = 0;
                        yCnt = 0;
                        i = -1;
                        x = s.charAt(0);
                    }
                    else answer++;
                }
            }

        if(!s.isEmpty()) return answer + 1;
        else             return answer;
    }
}

내가 생각하던 substring을 생각해서 구현하심,,,!

반응형