문제 이름:
문자열 나누기
문제 설명:
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다.
처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고,
분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
처음 작성한 코드 :
문제 설명을 읽어봤는데 처음엔 무슨 말인지 이해가 안 돼서 문장이 끝나는 지점으로부터 끊어서 읽고 그것부터
코드로 작성을 했다
첫 문장인 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
이 문장을 먼저 코드로 작성을 하고 ( char x = s.charAt(0) ) 그 다음 문장인
이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다.
int cnt = 0; int cnt2 = 0;
for(int i = 0; i < s.length(); i++){ if(x = s.charAt(i)) { cnt++; } else { cnt2++; } }
이렇게 코드를 작성을 하고 그 다음 문장을 읽어봤다.
처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
두 횟수가 같아지는 순간 멈춰야 하니
for(int i = 0; i < s.length(); i++){ if(x = s.charAt(i)) { cnt++; } else { cnt2++; } if (cnt == cnt2) { break; } }
코드를 이렇게 작성을 하고 지금까지 문자열을 분리를 하라고 얘기를 해서 어떻게 분리를 할까 생각을 하다가
문자열을 분리하라는건 앞의 문자를 없애야 하니 글자 x를 없어진 문자열의 바로 뒤의 문자로 바꿔주고 다시 반복문을
돌리면 되지 않을까 라고 생각이 나서 코드를 작성을 했다. x와 cnt, cnt2도 같이 초기화를 해줘야 하니 같이 반복문으로
넣었다
for(int i = 0; i < s.length(); i++) { char x = s.charAt(i); int cnt = 0; int cnt2 = 0;}
이렇게 코드를 작성을 하고 다음 문장으로 넘어갔다.
s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
이 문장은 이 때까지 작성한 코드를 보니 다 되어있어서 마지막으로 분리된 문자열을 세고 끝내면 될 것 같다
answer++;
이렇게 작성한 코드 :
class Solution {
public int solution(String s) {
int answer = 0;
for(int i = 0; i < s.length(); i++){
char x = s.charAt(i);
int cnt = 0;
int cnt2 = 0;
for(int j = 0; i < s.length(); j++){
if(x == s.charAt(i)){
cnt++;
} else {
cnt2++;
}
if(cnt == cnt2){
break;
}
}
answer++;
}
return answer;
}
}
위에 코드로 작성을 하고 실행을 돌리니까 시간 초과가 뜨고 다시 코드를 작성하라고 나왔다.
내가 작성한 코드를 보면서 생각을 해보니 첫 번째 반복문에서 글자를 받아오면 두 번째 반복문에서
글자를 문자열 전체를 비교를하고 있었다. 저렇게 하게 되면 시간이 오래 걸릴 뿐만 아니라 값도 이상하게
나올것이 분명하다.
그래서 생각을 한 것이 while문을 쓰면 증감식을 한번만 써도 괜찮기 때문에 while문을 써서 하게 되면 비교를
문자열 전체로 안 하고 글자를 받아 온 곳부터 비교를 시작할 수 있겠다라고 생각을 해서 while문을 사용한 것으로
코드를 다시 작성을 했다.
while문을 사용해서 다시 작성한 코드 :
class Solution {
public int solution(String s) {
int answer = 0; //문자열을 분리하고 센 갯수
int i = 0; // while문을 사용하기 위해 쓴 초기값
while(i < s.length()){ // 초기화를 위한 while문
char x = s.charAt(i);
int cnt = 0;
int cnt2 = 0;
while(i < s.length()){ //비교를 하기 위한 while문
if(s.charAt(i) == x){
cnt++;
} else {
cnt2++;
}
i++;
if(cnt == cnt2){
break;
}
}
answer++;
}
return answer;
}
}
'프로그래머스 문제' 카테고리의 다른 글
프로그래머스 (Java) 둘만의 암호 (0) | 2024.08.01 |
---|---|
프로그래머스 (Java) 대충 만든 자판 (0) | 2024.07.31 |
프로그래머스 Java 체육복 (0) | 2024.07.29 |
프로그래머스 Java 로또의 최고 순위와 최저 순위 (0) | 2024.07.26 |
프로그래머스 Java 기사단원의 무기 (0) | 2024.07.25 |