본문 바로가기

스파르타코딩클럽(내일배움캠프)

스파르타 코딩 클럽 3주차 4일

728x90

[알고리즘]

1레벨 프로그래머스 k번째수

 

import java.util.Arrays;
class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        // System.out.println(commands.length);
        for(int i=0;i<commands.length;i++)
        {
            int temp_num=0;
            
            int first = commands[i][0]-1;
            int last = commands[i][1];
            int size = last - first;
            int[] temp_array = new int[size];
            int pick = commands[i][2]-1;
            for(int j=first;j<last;j++)
            {
                temp_array[j-first] = array[j];
            }
            // for(int j=0;j<temp_array.length;j++)
            // {
            //     System.out.println(temp_array[j]);
            // }
            Arrays.sort(temp_array);
            
            System.out.println(temp_array[pick]);
            answer[i] = temp_array[pick];    
            
        }
        return answer;
    }
}

 

보완점

1. answer자체를 어레이 리스트로 만들어서 고정 할당 말고 자유롭게 구현을 해봐야겠다.

2. 소팅 문제이므로 sort 내장함수 말고, 실제로 버블소트를 제외한 퀵소트나 머지소트를 구현해봐야겠다.

 

 

[자바 강의]

1. 날짜와 시간

 

import java.time.LocalDateTime;
        import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd h/mm");
        String now = dateTimeFormatter.format(LocalDateTime.now());
        System.out.println("현재시간: " + now);
    }
}

2. 컬렉션 : 리스트, 셋, 맵, 스택, 큐, arraydeque

 

2-1 List : 순서대로 데이터를 저장.

public class Main {
    public static void main(String[] args) {
        List list = new ArrayList(10);
        list.add(1);
        list.add(5);
        list.add(4);
        list.add(11);
        list.add(10); // ArrayList에 값 한개씩 입력
        System.out.println(list); // [1,5,4,11,10]

        Collections.sort(list); // list 정렬
        System.out.println(list); // [1,4,5,10,11]

        System.out.println(list.size()); // arrayList의 크기 출력

        arrayList.remove(4); // 인덱스를 활용하여 해당하는 값 제거
        System.out.println(list);

        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i)); // get을 이용하여 값 1개씩 출력
        }
        for (int current : list) {
            System.out.println(current);
        }

    }
}

 

2-2 Set : 중복을 허용하지 않음

import java.util.ArrayList;
        import java.util.HashSet;
        import java.util.Set;

public class Main {
    public static void main(String[] args) {
        Set<Integer> integerSet = new HashSet<>(); // Collection의 자료형에는 primitive 타입은 올 수 없습니다. primitive 타입에 해당하는 class 가 존재하니 그것을 사용하세요.
        integerSet.add(1);
        integerSet.add(3);
        integerSet.add(2);
        integerSet.add(9);// 하나씩 값을 삽입합니다.
        System.out.println(integerSet); // 출력을 해보면 순서가 지켜지지 않는 것을 알 수 있습니다.

        Set<String> stringSet = new HashSet<>();
        stringSet.add("LA");
        stringSet.add("New York");
        stringSet.add("LasVegas");
        stringSet.add("San Francisco");
        stringSet.add("Seoul");
        System.out.println(stringSet);

        stringSet.remove("Seoul"); //Seoul을 HashSet에서 제거해보겠습니다.
        System.out.println(stringSet);

        ArrayList<String> target = new ArrayList<String>();
        target.add("New York");
        target.add("LasVegas");//제거할 항목을 ArrayList에 삽입하겠습니다.
        stringSet.removeAll(target);//제거항목에 삽입된 도시들을 삭제하겠습니다.
        System.out.println(stringSet);

        System.out.println("LA가 포함되어있나요? " + stringSet.contains("LA"));
        System.out.println("LA가 포함되어있나요? " + stringSet.contains("LasVegas"));
        //LA가 HashSet에 포함되어있으면 true를, 그렇지 않으면 false를 반환합니다.

        System.out.println("현재 HashSet의 크기는 : " + stringSet.size() + "입니다.");
        //HashSet의 크기를 반환합니다.

        stringSet.clear();//HashSet의 모든 아이템들을 삭제합니다.
        System.out.println(stringSet);
    }
}

 

2-3  map : key와 value로 이뤄짐 해쉬맵임

 

public class Main {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "apple");
        map.put(2, "berry");
        map.put(3, "cherry");

        System.out.println(map);

        System.out.println("1st in map: " + map.get(1));

        map.remove(2);
        System.out.println(map);
        System.out.println(map.containsKey(2));
        System.out.println(map.containsValue("cherry"));

        map.clear();
        System.out.println(map);
    }
}

2-4, 2-5 스택, 큐

 

1. 삽입

스택 : push,  큐 : add

 

2. 0번째출력

peak

 

3. 원소 찾기(리턴 true,false)

contains

 

4. 크기 반환

size

 

5. 비워있는지 확인

empty

 

6. 0번째 원소 제거

스택 : pop, 큐 : poll(익셉션 없음),remove(익셉션 발생)

 

7. 모두 비우기 

clear

 

3. 제네릭

 

public interface List<E> extends Collection<E> {
  // Collection 에 있는 메소드들 모두 포함 
  // + List 에만 있는 메소드들
boolean add(E e);
}

 

4. 람다식

"식별자 없이 실행 가능한 함수"라고 말할 수 있습니다. 즉, 함수의 이름을 따로 정의하지 않아도 곧바로 함수처럼 사용할 수 있는 것입니다. 문법이 간결하여 보다 편리한 방식입니다. (익명 함수라고도 부릅니다.)

 

'→'의 의미는 매개변수를 활용하여 {}안에 있는 코드를 실행한다는 것입니다.

 

[기존의 메소드 형식]
반환타입 메소드이름(매개변수 선언) {
    수행 코드 블록
}

[람다식의 형식]
(매개변수 선언) -> {
    수행 코드 블록
}

 

public class Main {
    public static void main(String[] args) {
        ArrayList<String> strList = new ArrayList<>(Arrays.asList("korea", "japan", "china", "france", "england"));
        Stream<String> stream = strList.stream();
        stream.map(str -> str.toUpperCase()).forEach(System.out::println);
    }
}

 

이중콜론 연산자 : for문을 돌리지 않더라도 요소들을 하나씩 출력

 

public class Main {
    public static void main(String[] args) {
        List<String> cities = Arrays.asList("서울", "부산", "속초", "수원", "대구");
        cities.forEach(x -> System.out.println(x)); // 아랫줄과 같은 역할임
        cities.forEach(System.out::println);
    }
}

 

728x90