17일차 Java, 알고리즘타임어택

LeeJaewon·2022년 11월 16일
0

1회 알고리즘 타임어택

프로그래머스 Lv.0 알고리즘 문제풀이 (4개 중 3개 이상 풀기)

1번 문제: 각도기

1번 문제 나의 풀이

2번 문제: 옷가게 할인 받기

2번 문제 나의 풀이

3번 문제: 3,6,9 게임
3번 문제는 시간 부족으로 인해 풀지 못했다

4번 문제: 로그인 성공?

4번 문제 나의 풀이

4번 문제 같은 경우에는 내가 풀었다기 보다는 구글링을 통해 짜맞춘거라고 봐야 할 것 같다.
1번, 2번 문제는 내가 고민하고 내가 코딩을 했기 때문에 문제를 풀고 난 후 기억에 남았는데 4번문제 같은 경우에는 구글링을 통해 유추해 낸 답이기 때문에 사실 기억이 잘 나지 않는다. 지금 TIL을 작성하면서 코드를 봐도 이해 안가는 부분이 적지 않다.
오늘 알고리즘 타임어택을 하면서 Lv.0도 나에겐 만만치 않다는 것을 느꼈지만 또 한편으로는 하면 된다는걸 느낄수 있는 기회여서 재밌었다.
앞으로 하루에 1~2문제는 알고리즘 문제를 꾸준히 풀어봐야겠다.

컬렉션

컬렉션 프레임워크

  • 다수의 데이터를 다루기 위한 자료구조를 표현하고 사용하는 클래스의 집합
  • 데이터를 다루는데 필요한 풍부하고 다양한 클래스와 기본함수를 제공하기 때문에 유용함.
  • 컬렉션 프레임워크의 모든 클래스는 Collection interface를 구현하는 클래스 또는 인터페이스

컬렉션 인터페이스와 자료구조

컬렉션 - List, Set, Map

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);
        }

    }
}

Set : 순서를 유지하지 않는 데이터의 집합, 데이터의 중복허용X

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);
    }
}

Map : HashMap은 Key와 Value를 하나의 데이터로 저장하는 특징을 가짐. 이를 통하여 해싱(hashing)을 가능하게 하여 데이터를 검색하는데 뛰어난 성능을 보임.

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);
    }
}

컬렉션 - Stack, Queue, ArrayDeque

Stack : 마지막에 저장한 데이터를 가장 먼저 꺼냄 LIFO

예) 컴퓨터 작업의 실행취소(Ctrl+Z, 웹브라우저의 페이지 이동)

Queue : 처음에 저장한 데이터를 가장 먼저 꺼냄 FIFO

예) 은행 창구 줄서기, 인쇄작업 대기목록, 놀이공원 대기줄 등

ArrayDeque : Stack, Queue의 기능을 모두 포함하면서도 성능이 더 좋다.

public class Main {
    public static void main(String[] args) {
        ArrayDeque<Integer> arrayDeque = new ArrayDeque<>(); // ArrayDeque를 이용한 선언(제네릭스 이용)
        arrayDeque.addFirst(1);
        arrayDeque.addFirst(2);
        arrayDeque.addFirst(3);
        arrayDeque.addFirst(4); // arrayDeque의 앞에 값을 삽입
        System.out.println(arrayDeque);

        arrayDeque.addLast(0); // arrayDeque의 끝에 값을 삽입
        System.out.println(arrayDeque);

        arrayDeque.offerFirst(10); // addFirst와 비슷하지만 큐의 크기 문제가 생길 때, offerFirst는 false를,
        // addFrist는 exception을 반환합니다.
        System.out.println(arrayDeque);

        arrayDeque.offerLast(-1); // arrayDeque의 끝에 값을 삽입
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.size()); // 7


        System.out.println(arrayDeque.removeFirst()); // 첫번째 값을 제거하면서 그 값을 리턴
        System.out.println(arrayDeque.removeLast()); // 마지막 값을 제거하면서 그 값을 리턴
		    System.out.println(arrayDeque);
				System.out.println(arrayDeque.size()); // 5

        System.out.println(arrayDeque.pollFirst()); // 첫번째 값을 반환 및 제거하면서 그 값을 리턴
        System.out.println(arrayDeque);
				System.out.println(arrayDeque.size()); // 4

        System.out.println(arrayDeque.pollLast()); // 마지막 값을 반환 및 제거하면서 그 값을 리턴
        System.out.println(arrayDeque);
				System.out.println(arrayDeque.size()); // 3

        System.out.println(arrayDeque.peekFirst()); // 첫번째 값을 반환, 제거하지 않음
        System.out.println(arrayDeque.peekLast()); // 마지막 값을 반환, 제거하지 않음
				System.out.println(arrayDeque.size()); // 3
    }
}
profile
한 걸음 한 걸음 꾸준히

0개의 댓글