본문 바로가기
Dev/Algorithm

[프로그래머스] 문자열 나누기 - Java

by VIPeveloper 2024. 5. 21.
반응형

문제

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

 

프로그래머스

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

programmers.co.kr

 

생각

  • 해시를 이용했고, 마지막 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;
    }
}

다른 사람 풀이

  • 다른사람 풀이도 비슷했다. 
반응형