반응형
https://school.programmers.co.kr/learn/courses/30/lessons/140108
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1) 내가 구현한 코드
class Solution {
public int solution(String s) {
int answer = 0;
int sameCnt = 0;
int diffCnt = 0;
char temp = s.charAt(0);
for(int i=0; i<s.length(); i++){
if(sameCnt == diffCnt) {
temp = s.charAt(i); //같을 경우 다시 비교대상 초기화
answer++;
//System.out.println("temp : "+temp);
}
if(temp == s.charAt(i)) {
sameCnt++; //처음 자기자신과 일치할 경우 +1해줌
}else{
diffCnt++;
}
}
return answer;
}
}
2) 오늘의 학습 키워드
- 문자열 분할 및 슬라이싱
- 조건에 따른 부분 문자열 분리
- 문자열의 순차 처리 및 개수 세기
3) 공부한 내용 정리
이 문제는 문자열의 특정 패턴을 기준으로 부분 문자열을 나누는 작업이다.
첫 글자를 x로 두고, x와 x가 아닌 다른 문자의 개수를 세며, 두 개수가 같아질 때 해당 구간을 분리한다.
이를 통해 조건에 맞춰 문자열을 분할하고, 전체 분할 개수를 반환하는 방식으로 접근한다.
- 초기 문자 설정 및 개수 비교:
- 문자열의 첫 글자를 x로 설정한 후, x의 개수와 x가 아닌 문자의 개수를 각각 센다.
- x와 다른 문자의 개수가 같아질 때마다 분리를 진행한다.
- 남은 문자열 처리:
- 만약 전체 문자열을 다 순회했는데도 두 개수가 같지 않은 경우, 그때까지의 문자열을 하나의 부분 문자열로 처리한다.
- 효율성 고려:
- 문자열의 최대 길이가 10,000이므로 반복 작업을 최소화해 O(n)으로 처리할 수 있도록 설계한다.
4) 문제 해결 과정
- 분리 조건 확인:
- x와 x가 아닌 문자의 개수를 카운트하면서, 두 개수가 같아질 때마다 분리 횟수를 증가시킨다.
- 분리 과정 반복:
- 분리 후, 새로 남은 문자열의 첫 문자를 x로 설정하고 다시 같은 과정을 반복한다.
- 모든 문자열을 순회하고 나면, 남은 부분 문자열을 최종 카운트에 포함한다.
- 추가 구현 코드:
public class Solution {
public int solution(String s) {
int count = 0; // 분리된 문자열 개수
int xCount = 0; // x의 개수
int otherCount = 0; // x가 아닌 문자 개수
char x = s.charAt(0); // 첫 문자를 x로 설정
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == x) {
xCount++;
} else {
otherCount++;
}
if (xCount == otherCount) {
count++; // 분리된 문자열 개수 증가
if (i + 1 < s.length()) {
x = s.charAt(i + 1); // 다음 문자열의 첫 글자를 x로 설정
}
xCount = 0; // 카운트 초기화
otherCount = 0;
}
}
// 남은 문자열이 있다면 마지막으로 한 번 더 카운트
if (xCount != 0 || otherCount != 0) {
count++;
}
return count;
}
}
5) 오늘의 회고
- 문제점
- 문자열을 분할할 때 매번 첫 문자를 x로 설정해야 했고, x와 다른 문자의 개수를 동시에 세야 하는 조건을 구현하는 데 주의가 필요했다.
- 시도한 방법
- 슬라이딩 윈도우와 비슷한 방식으로 x와 다른 문자의 개수를 비교하여 분리하였고, 문자열을 순회하면서 연산을 최소화하도록 했다.
- 새롭게 알게 된 점
- 문자열의 패턴을 조건에 맞춰 분할하는 방식과, 특정 조건에 맞춰 개수를 세고 반복문을 효율적으로 사용하여 문자열을 처리하는 방법을 익혔다.
- 내일 학습 목표
- 문자열 조작 문제를 해결하는 다양한 기법을 학습하고, 여러 문제에 적용하는 연습을 할 계획이다.
Q1: 다른 언어로는 이 문제를 어떻게 풀어볼 수 있을까? 파이썬에서는 어떤 접근이 효율적일까?
Q2: 문자열 분할 문제에서 슬라이딩 윈도우 외의 다른 기법으로도 해결할 수 있는 방법이 있을까?
Q3: 문자열을 나누지 않고도 x와 같은 글자와 다른 글자의 개수를 비교하는 방식으로 문제를 변형할 수 있을까?
6) 추가 문제
미들러 - 입국심사
https://school.programmers.co.kr/learn/courses/30/lessons/43238
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
챌린저 - 회장뽑기
https://www.acmicpc.net/problem/2660
반응형
'coding_test' 카테고리의 다른 글
[99클럽 4기 코테 스터디 TIL 4일차 보너스문제] 의상 (feat. 해시맵) (1) | 2024.10.31 |
---|---|
[99클럽 4기 코테 스터디 TIL 4일차] 숫자 문자열과 영단어 (0) | 2024.10.31 |
[99클럽 4기 코테 스터디 TIL 2일차] 크기가 작은 부분 문자열 (0) | 2024.10.30 |
[99클럽 4기 코테 스터디 TIL 1일차] 문자열 내 p와 y의 개수 (1) | 2024.10.28 |
[코딩테스트] 4. 프로그래머스 코딩테스트입문 (Day5, Day6) 코딩 기초 트레이닝 (Day1, Day2) (0) | 2024.10.18 |