Algorithm/Programmers

[프로그래머스] 튜플 - Java

ikjo 2022. 5. 8. 20:29

문제 설명

 

 

코딩테스트 연습 - 튜플

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr

 

접근 방법

우선 입력받은 문자열 s 중 '{'와 '}'를 모두 제거하여 숫자와 쉼표(,)만 남게 합니다. 이후 쉼표(,)를 기준으로 문자열을 분리(split)하여 문자열(숫자 문자열) 배열을 만듭니다.

 

        s = s.replace("{", "");
        s = s.replace("}", "");
        String[] numbers = s.split(",");

 

 

각각의 숫자 문자열을 HashMap에 key 값으로 저장하면서 개수(value)를 카운팅(counting)합니다.

 

        Map<String, Integer> map = new HashMap<>();
        for (String number : numbers) {
            map.put(number, map.getOrDefault(number, 0) + 1);
        }

 

 

HashMap 크기 만큼의 배열을 만들어 HashMap key의 개수(value)가 가장 많을수록 첫 번째 인덱스에 가깝게, 개수가 가장 적을수록 마지막 인덱스에 가깝게 저장합니다.

 

        int totalCount = map.size();
        int[] answer = new int[totalCount];

        for (String key : map.keySet()) {
            answer[totalCount - map.get(key)] = Integer.parseInt(key);
        }

 

 

전체 소스 코드

import java.util.HashMap;
import java.util.Map;

class Solution {
    public int[] solution(String s) {
        Map<String, Integer> map = new HashMap<>();
        s = s.replace("{", "");
        s = s.replace("}", "");
        String[] numbers = s.split(",");
        for (String number : numbers) {
            map.put(number, map.getOrDefault(number, 0) + 1);
        }

        int totalCount = map.size();
        int[] answer = new int[totalCount];

        for (String key : map.keySet()) {
            answer[totalCount - map.get(key)] = Integer.parseInt(key);
        }

        return answer;
    }
}

 

참고자료