본문 바로가기

공부해 codingTest

프로그래머스 JAVA Level 1. 문자열 나누기

Level 1. 문자열 나누기

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

 

프로그래머스

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

programmers.co.kr

 

1. 통과

 

2. 통과 코드

 

3. 문제 해석

첫 글자를 x라고 한다.

그 다음 글자부터 x와 같은 글자인지 다른 글자인지 숫자를 센다.

(첫 글자도 포함하여 숫자를 센다.)

같은 글자 수와 다른 글자 수가 같아지는 글자까지 자른다.

 

자른 부분 중 뒷부분의 첫 글자를 x라고 한다.

반복한다.

 

4. 풀이

(1) String x = "";로 초기화하고, 주어진 문자열 s의 길이만큼 for문을 작성한다.

(2) x가 ""이면 문자열 s를 substring으로 잘라 x에 저장한다.

     (첫 글자를 x라고 저장하는 거다.)

(3) 첫 글자를 x로 저장했으니 x라는 글자가 1개 있는거다.

     그러니 cnt++;를 한다.

     그리고 continue를 사용해 다음 글자로 넘어간다.

 

(4) 이제부터 x와 같은 글자가 나오면 cnt++;, 다른 글자가 나오면 cnt--;를 한다.

(5) cnt가 0이되면 같은 글자 수와 다른 글자 수가 같아지는 순간이다.

     이때 문제에서는 문자열을 자른다고 표현했지만 실제로 코드로 자르진 않는다.

     answer++;로 1번 잘랐다고 표시해둔다.

     그리고 x = ""로 초기화한다.

     (for문에 다음 순서가 있다면 x를 다시 설정하기 위함이다.)

 

(6) for문이 끝나고 x가 ""이 아니라면 주어진 문자열 s를 자르고 나서 마지막 1글자가 남은 것이다.

     예를 들어 s = "abc"라면 ab c로 잘리는데 x가 마지막에 c가 된다.

     문제에서 요구하는 answer는 잘린 덩이 수이기 때문에 answer++로 1을 더해준다.

 

     만약 x=""로 끝났다면 answer++를 하지 않아야 한다.

     왜냐하면 s = "ab"라면 ab로 잘리고 x가 마지막에 ""이 되기 때문이다.