[프로그래머스(Programmers)][자바(java)] (Lv2) 튜플 <2019 카카오 개발자 겨울 인턴십>

728x90

 

programmers.co.kr/learn/courses/30/lessons/64065

 

 

문제 풀이

중복 없고, 순서 있는 구조.

자바에는 튜플이 없으므로 set을 이용하여 겹치지 않을 경우에만 결과로 반환할 배열에 넣음

( String.split()보다 StringTokenizer가 속도면에서 더 빠르기때문에 웬만하면 StringTokenizer를 사용하려고 했으나 구분자에 공백이 포함될 경우 공백을 구분자로 취급을 안하는 것 같아 split 함수를 사용하였다. )

( Set 인터페이스의 add함수는 set안의 요소들과 겹치지 않을 경우에 true를 반환한다는 것을 이용하였다 ) 

 

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;

public class Solution {
	
	public static int[] solution(String s) {
		String str[] = s.replace("{", " ").replace("}", " ").trim().split(" , ");
		Arrays.sort( str, ( s1, s2 ) -> { return s1.length()-s2.length(); } );
		Set<Integer> hs = new HashSet<>();
		StringTokenizer st;
		int res[] = new int[str.length], i = 0, n;
		for( String ss : str ) {
			st = new StringTokenizer( ss, "," );
			while( st.hasMoreTokens() ) {
				n = Integer.parseInt( st.nextToken() );
				if( hs.add( n ) )
					res[i++] = n;
			}
		}
		return res;
	}
}

 

 

반응형