ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2019 카카오 겨울인턴] 튜플 (JAVA)
    알고리즘 공부/문제 풀이 2020. 5. 6. 22:01

    <접근 방법>

     

    1. 입력으로 들어온 스트링을 1 1,2 1,2,3 ... 과 같이 정리하기

     

    1) 입력의 첫번째와 마지막을 감싸고 있는 중괄호 벗겨내기

    ->String 메서드 s.substring 이용

    2) 입력의 "},{"을 "/" 로 치환하기

    -> replace 이용

    split에 "},{" 들어가면 오류나서.. 아마 입력에 "},{"가 한 묶음처럼 나타나지 않는 부분도 있어서 그런듯

    3) 치환된 "/"를 기준으로 스트링 나누어 스트링배열 만들기

    -> String 메서드 s.split("") 이용

     

    	        String subS=s.substring(2, s.length()-2);
    	        subS=subS.replace("},{","/");
    	        String[] arrS=subS.split("/");
    	        answer=new int[arrS.length];
    	        

     

    2. 정리된 스트링 배열을 오름차순으로 정리하기

     

    Arrays.sort(배열,정렬방법)

    -> 정렬방법 : Comparator 이용하여 정의 

     

    	        Comparator<String> c = new Comparator<String>() { 
    	        	public int compare(String s1, String s2) { 
    	        		return Integer.compare(s1.length(), s2.length()); 
    	        		} 
    	        }; 
    	        	
    	        Arrays.sort(arrS, c);
    	        

     

    3. (실패했지만 나의 시도)

     

    1) 반복문을 통해 스트링 배열에 접근

    2) 해당 원소의 ","를 없앤다

    -> s[i]=s[i].replace(",","")

    3) 그러면 남은 것은 오직 숫자뿐! 그것을 정답 배열에 넣어준다

    4) 바로 다음 원소부터 끝까지 이 숫자를 ","로 치환한다

    5) 반복반복

    	        for(int i=0;i<arrS.length;i++) {
    	         	arrS[i]=arrS[i].replace(",","");
    	        	answer[i]=Integer.parseInt(arrS[i]);
    	        	for(int j=i+1;j<arrS.length;j++) {
    	        		String num=Integer.toString(answer[i]);
    	        		arrS[j]=arrS[j].replace(num, ",");
    	        	}
    	        }

     

    몇몇 테스트케이스에 대해선 정답인데, 틀린 경우가 나옴 ㅠㅠ 

    아직도 왜인지 모르겠음 흑흑

     

    4. (정답인 남의 시도)

     

    1) HashSet를 활용한다 : 중복 허용하지 않고 순서 관계없는 자료구조

    2) for-each 반복문으로 생성한 배열에 접근

    3) 배열 원소를 ","로 split하여 하나하나 숫자에 대해 접근

    4) HashSet에 넣을 수 있다면 정답배열로 넣기

     

    	        
    	        Set<String> set=new HashSet<String>();
    	        
                int idx=0;
    	        
    	        for(String s1: arrS){
                    for(String s2: s1.split(",")){
                        if(set.add(s2)) answer[idx++]=Integer.parseInt(s2);
                    }
                }        
        

    으앙으앙 

     

    <전체코드>

    package kakao;
    
    import java.util.*;
    
    public class tuple {
    	 static int[] solution(String s) {
    	        int[] answer;
    	        Set<String> set=new HashSet<String>();
    	        
    	        String subS=s.substring(2, s.length()-2);
    	        subS=subS.replace("},{","/");
    	        String[] arrS=subS.split("/");
    	        answer=new int[arrS.length];
    	        
    	        
    	        Comparator<String> c = new Comparator<String>() { 
    	        	public int compare(String s1, String s2) { 
    	        		return Integer.compare(s1.length(), s2.length()); 
    	        		} 
    	        }; 
    	        	
    	        Arrays.sort(arrS, c);
    	        
    	        /*
    	        for(int i=0;i<arrS.length;i++) {
    	         	arrS[i]=arrS[i].replace(",","");
    	        	answer[i]=Integer.parseInt(arrS[i]);
    	        	for(int j=i+1;j<arrS.length;j++) {
    	        		String num=Integer.toString(answer[i]);
    	        		arrS[j]=arrS[j].replace(num, ",");
    	        	}
    	        }
    	        */
    	        
    	        int idx=0;
    	        
    	        for(String s1: arrS){
                    for(String s2: s1.split(",")){
                        if(set.add(s2)) answer[idx++]=Integer.parseInt(s2);
                    }
                }        
        
    	        
    	        return answer;
    	 }
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    		int[] a=solution("{{4,2,3},{3},{2,3,4,1},{2,3}}");
    		for(int i=0;i<a.length;i++) {
    			System.out.println(a[i]);
    		}
    	}
    
    }
    

     

     

    제 코드 반례좀 찾아주세용 ㅠㅠ

     

    for-each 친숙해지기!

    자료구조 능숙하게 사용하기 

     

    댓글

Designed by Tistory.