CodeingTestPrac/Java Coding Test

Java 코테준비 2일차

sung.hyun.1204 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();