ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 코테준비 2일차
    CodeingTestPrac/Java Coding Test 2023. 4. 28. 15:17

     

    이 글을 쓰기 전에는 약 3주 정도의 기간동안 파이썬을 이용한 코테준비를 했었다.

     

    그러다가 python 을 지원하지 않는 코테를 보게 되는 경우가 생겨 준비를 한다.

     

    사이트는 프로그래머스를 이용을 한다.  -> 백준을 이용하는 분들은 buffer read 를 이용한 입력을 받는 것을 전제로 준비를 하자.

     

     

    우선 프로그래머스는 다음과 같이  반환 타입을 요구한다.

    class Solution {
        public int[] solution(String s) {

           하지만, int[] 로 꼭 반환을 해야 테스트 케이스를 통과하는게 아니다.

     

    급하면 다음과 같이 반환을 해주자.

    class Solution {
        public List<Integer> solution(String s) {

     

     

    코테는 기본적으로 알고리즘 이론을 아는 전제 하 자신이 잘하는 언어가 최소 1개 있다라는 전제에서 

     

    "자료형 , 반복문, 조건문 을 익히고, String 에서 int 변환 역으로 변환 등을 익히면 무슨 문제든 풀 수 있다".

     

    그러나, 자바는 코드량이 특히 많기 때문에 꼭 stream 을 익히는것을 권장하며 많은 기업들이 구현 유형을 제시를 한다.추가적으로 , String list,array 의 sub 을 구하는 방식, sorting 방식을 익히고 ide 의 도움없이 프로그래머스 사이트에서 꼭 꼭 연습을 하자.

     

     

    코드를 보자 ,

    int[] items = {1, 2, 3, 4, 5, 6};
            
    List<Integer> arrList = new ArrayList<>(Arrays.stream(items).boxed().collect(Collectors.toList()));
    
    int[] intAnswer = arrList.stream().mapToInt(Integer::intValue).toArray();
    
    
    String[] stringAnswer = arrList.stream()
            .map(Object::toString)
            .toArray(String[]::new);

     

    입력값이 보통 배열 int[] 와 같이 "Array" 배열로 주어짐으로 양방향으로 변환하는 필수 문법이다.  <외우자>

     

     

    다음과 같이 코드량을 줄일수도 있다. 

     

    Stream 을 적극적으로 사용 전

    String s = "{{2},{2,1},{2,1,3},{2,1,3,4}}" ;
            String preString = s.substring(2,s.length()-2);
            preString = preString.replace("{","");
    
            List<String> preList = new ArrayList(Arrays.asList(preString.split("},")));
            List<List<Integer>> preIntList = new ArrayList();
            for(String item :preList){
                List<Integer> innerList = new ArrayList();
                for(String is : item.split(",")){
                    innerList.add(Integer.parseInt(is));
                }
                preIntList.add(innerList);
            }
    
    
            preIntList.sort(Comparator.comparingInt(List::size));
    
    
            List<Integer> ansList = new ArrayList();
            for(List<Integer> iteml: preIntList){
                for(Integer item: iteml){
                    if(!ansList.contains(item)){
                        ansList.add(item);
                    }
                }
            }
    
            int [] answer = new int [ansList.size()];
            for(int i = 0 ; i < ansList.size();i++){
                answer[i] = ansList.get(i);
            }

     

     

    Stream 을 적극적으로 사용 후

    String s = "{{2},{2,1},{2,1,3},{2,1,3,4}}" ;
    
    List<List<Integer>> intList = Arrays.stream(s.substring(2, s.length() - 2).split("\\},\\{"))
            .map(str -> Arrays.stream(str.split(",")).map(Integer::parseInt).collect(Collectors.toList()))
            .sorted(Comparator.comparingInt(List::size))
            .collect(Collectors.toList());
    // result : [[2], [2, 1], [2, 1, 3], [2, 1, 3, 4]]
    
    List<Integer> ansList = intList.stream()
            .flatMap(Collection::stream)
            .distinct()
            .collect(Collectors.toList());
            
    // result :  [2, 1, 3, 4]
    
    int [] answer = ansList.stream().mapToInt(Integer::intValue).toArray();

     

Designed by Tistory.