728x90
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/140108
생각
- 해시를 이용했고, 마지막 42번 테케가 통과가 절때 안되어서 힌트보고 수정해서 맞췄다.
- 왜 안되는지 모르겠지만 일단 첨부한다.
// 1. s 를 순회하며
// 2. 첫 글자를 hashmap 에 넣고
// 3. 나머지를 X 에 넣는다.
// 4. 넣을 때마다 비교해서 같으면 answer++
// 4.1 hashmap clear
// 5. 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
코드
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// System.out.println(solution("banana" ));
// System.out.println(solution("abracadabra"));
System.out.println(solution("aaabbaccccabba")); // 3
System.out.println(solution("aaaaaaaabbba")); // 1
System.out.println(solution("abaaaaaabbba")); // 2
System.out.println(solution("abaabc")); // 2
}
public static int solution(String s) {
int answer = 0;
HashMap<Character, Integer> hashMap = new HashMap<>();
// 1. s 를 순회하며
char first_char = s.charAt(0);
int cnt = 0;
for (int i = 0; i < s.length(); i++) {
// 2. 첫 글자를 hashmap 에 넣고
if(hashMap.isEmpty()){
first_char = s.charAt(i);
hashMap.put(first_char,1);
}else if(hashMap.getOrDefault(s.charAt(i),0)!=0){
hashMap.put(first_char,hashMap.get(first_char)+1);
}else{
// 3. 나머지를 X 에 넣는다.
// hashMap.put('X',hashMap.getOrDefault('X',0)+1);
cnt++;
}
// 4. 넣을 때마다 비교해서 같으면 answer++
// if(hashMap.get(first_char) == hashMap.getOrDefault('X',0)){
if(hashMap.get(first_char) == cnt){
answer++;
// 4.1 hashmap clear
hashMap.clear();
cnt=0;
}
}
// 5. 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
return hashMap.isEmpty() ? answer : answer+1;
}
}
다른 사람 풀이
- 다른사람 풀이도 비슷했다.
728x90
반응형
'Dev > Algorithm' 카테고리의 다른 글
[프로그래머스] 가장 가까운 같은 글자 - Java (0) | 2024.05.22 |
---|---|
[프로그래머스] 크기가 작은 부분 문자열 - Java (0) | 2024.05.21 |
[프로그래머스] 둘만의 암호 - Java (0) | 2024.05.21 |
[프로그래머스] 대충 만든 자판 - Java (0) | 2024.05.20 |
[프로그래머스] 덧칠하기 - Java (0) | 2024.05.20 |