[프로그래머스] (lv.2) 튜플 (java)

0

코딩테스트

목록 보기
18/37
post-thumbnail

<문제>

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

<나의 풀이>

import java.util.LinkedHashSet;
import java.util.Arrays;

class Solution {
    public int solution(int[] nums) {
        // 1. s를 배열로 만들어주기
        s = s.substring(1, s.length() - 2);
        s = s.replace("{", "");
        String[] arr = s.split("},");
        // 2. 문자열 길이에 따라 정렬
        Arrays.sort(arr, (String s1, String s2) -> s1.length() - s2.length());
        s = String.join(",", arr);
        arr = s.split(",");
        // 3. 중복 제거
        LinkedHashSet<Integer> set = new LinkedHashSet<>();
        for (String num : arr) {
            set.add(Integer.parseInt(num));
        }
        // 4. set -> int [] 변환
        int[] answer = set.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }
}

<다른 사람의 풀이>

import java.util.*;
class Solution {
    public int[] solution(String s) {
        Set<String> set = new HashSet<>();
        String[] arr = s.replaceAll("[{]", " ").replaceAll("[}]", " ").trim().split(" , ");
        Arrays.sort(arr, (a, b)->{return a.length() - b.length();});
        int[] answer = new int[arr.length];
        int idx = 0;
        for(String s1 : arr) {
            for(String s2 : s1.split(",")) {
                if(set.add(s2)) answer[idx++] = Integer.parseInt(s2);
            }
        }
        return answer;
    }
}

우와...

<핵심 개념>

중복제거에 set이 정말 빠르다. set의 사용법 숙지해두기
문자열을 다루는 방법을 더 연습해야겠다.

  • 배열 내 문자의 길이에 따라 정렬하는 방법
    Arrays.sort(arr, (a,b)-> {return a.length() - b.length();});

  • set 자료형에서 .add()할 때
    set에 존재함 -> false 반환
    set에 존재 X -> true 반환

<피드백>

푸는데 거의 2시간 걸린 것 같다. 전보단 줄었는데 IDE없이 푸는 코딩테스트에서 잘 풀 수 있을 것 같진 않다. IDE가 진짜.. ㅠ 얼마나 효율성을 극대화해주는지 새삼 깨달았다.
매일 연습중인데도 버벅거리기 일쑤지만 하나 둘 씩 익숙해져 가는 과정이 즐겁다.

profile
두둥탁 뉴비등장

0개의 댓글