일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백준
- 백엔드
- LEVEL2
- Kakao
- PYTHON
- CSS
- mysql
- siver3
- 개념
- Thymeleaf
- glod4
- 프로그래머스
- spring
- 배포
- jpa
- Gold4
- gold5
- LEVEL1
- 9252
- leetcode 69
- leetcode
- 구현
- java
- AWS
- gold2
- LCS
- 오류
- glod5
- error
- HTML
- Today
- Total
이 험난한 세상에서어어~
문자열 나누기 본문
문제 설명
문제를 처음 봤을 때는 이해하기 어려울 수 있으나 찬찬히 보면 꽤 쉬운 문제다.
1. 일단 맨 처음 문자를 x로 잡는다.
2. 그리고 문자열을 돌면서 x와 같은 문자와 다른 문자의 수를 센다.
3. 그렇게 센 값들이 같아지면 문자열을 분리하고 그 다음 문자를 1부터 반복한다.
설명만 보면 어려울 수 있으나 코드를 보면 이해하기가 훨씬 쉬울 것이다.
https://school.programmers.co.kr/learn/courses/30/lessons/140108#
문제 풀이
첫 번째 풀이
일단 x에다가 첫 번째 문자를 넣어준다. 그리고 countX에는 1을 countOther에는 0을 넣어준다. countX는 x와 같은 문자를 세는 변수이고 countOther은 x와 다른 문자를 세는 변수이다. 그리고 이 두 변수가 같으면 answer을 하나 올려주고 두 개의 변수를 0으로 처리한다. 다음 x를 갱신해줘야 하는데, 여기서 중요한 것은 끝난 문자 다음 문자부터 시작해야 하니 s[i+1]을 넣어야 한다는 것이다. 다만, 인덱스의 범위를 넘을 것이 분명하기에 i != len(s)-1을 넣어서 문제가 발생하지 않도록 한다.
그렇다면 여기서 드는 의문. 만일 countX와 countOther이 같지 않은 상태로 끝났을 때 그 나머지 문자열은 어떻게 구분을 해줘야 하나?
여기서 나는 어느 정도 고민을 했는데, 나의 코드에서 힌드를 얻어서 풀이를 했다. 나는 countX와 countOther이 같을 때 두 변수를 0으로 만들도록 했다. 그러면 countX와 countOther이 같지 않은 상태로, 즉 맨 뒤에 문자열이 남을 상태로 끝났다면 적어도 둘 중 하나는 0이 아니지 않을까?
그래서 반복문을 끝내고 둘 중 하나라도 0이 아니면 answer에 1을 더해주도록 했다. 그래서 정답!
코드
python
def solution(s):
answer = 0
# 맨 처음 나온 글자를 x
# x와 x가 아닌 글자의 수를 세서 비교한다.
# 같아지면 해당 문자열을 분리하고 다시 처음부터 반복
x = s[0]
countX = 1
countOther = 0
for i in range(1, len(s)):
if x == s[i]:
countX += 1
else:
countOther += 1
if countX == countOther:
answer += 1
countX = 0
countOther = 0
if i != len(s)-1:
x = s[i+1]
if countX != 0 or countOther != 0:
# print("이 부분")
answer += 1
return answer
java
class Solution {
public int solution(String s) {
int answer = 0;
char x = s.charAt(0);
int countX = 1;
int countOther = 0;
for(int i = 1; i<s.length(); i++){
if(x == s.charAt(i)){
countX++;
}else{
countOther++;
}
if(countX == countOther){
answer++;
countX = 0;
countOther = 0;
if(i != s.length()-1){
x = s.charAt(i+1);
}
}
}
if(countX != 0 || countOther != 0){
answer++;
}
return answer;
}
}