본문 바로가기

내일배움캠프 4기 스프링/내배캠 TIL📘

11. 16 알고리즘 TIME ATTACK 풀이/ JAVA 기초 강좌

728x90

1. 알고리즘 타임어택 풀이

풀이 후 QnA 시간:

코테 시 제한사항 필수 확인
숫자 단위 표현 : _ ex) 300_000 = 300,000
-> 가독성 목적
코드 작성: 프로그램에서 먼저 하고 코테 사이트에 옮기는 센스

long longType = Integer.MAX_VALUE + 1L;
// 형변환
*파이썬보다 자바의 실수, 정수 범위가 작다
자바에서는 데이터의 손실이 발생하지 않거나, 데이터의 손실이 최소화되는 방향으로 묵시적 타입변환을 진행
자동 형변환 : 데이터 크기가 더 큰 데이터 타입으로
(JAVA) 0.00 ~ 자동 더블인식/ 숫자는 자동 float인식

while은 끝을 알지 못할 때 쓴다(for는 범위를 알고 있을때)
String은 왜 배열처럼 쓸수 있는지?? for문, 슬라이싱, 인덱싱이 가능한지??

2. JAVA 기초 강좌

컬렉션 : 자료구조를 표현하는 인터페이스, 모든 자료구조가 implement하는 인터페이스

 

from TCP SCHOOL.com : 컬렉션 프레임워크 http://www.tcpschool.com/java/java_collectionFramework_concept

컬렉션 프레임워크 : 자료구조 + 알고리즘을 클래스로 구현해놓은 것

주요 인터페이스 : LIST, SET, MAP (LIST와 SET은 컬렉션 인터페이스를 상속받지만, MAP은 별도 정의)

http://www.tcpschool.com/java/java_collectionFramework_concept

+제네릭

  1. List : 순서가 있는 데이터의 집합이며 데이터의 중복을 허용합니다. → ArrayList, LinkedList, Stack 등
  2. Set : 순서를 유지하지 않는 데이터의 집합이며 데이터의 중복을 허용하지 않습니다. → HashSet, TreeSet 등
  3. Map : 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합입니다. 순서는 유지되지 않으며 키는 중복을 허용되지 않고 값은 중복을 허용합니다. → HashMap, TreeMap 등
  4. Stack : 마지막에 넣은 데이터를 먼저 꺼내는 자료구조입니다. LIFO(Last In First Out) → Stack, ArrayDeque 등
  5. Queue : 먼저 넣은 데이터를 먼저 꺼내는 자료구조입니다. FIFO(First In First Out) → Queue, ArrayDeque 등

List 예제

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class Main {
    public static void main(String[] args) {
        List<Integer> integerList = new ArrayList<>();

        integerList.add(1);
        integerList.add(5);
        integerList.add(20);
        integerList.add(4);
        integerList.add(15); //ArrayList에 값 추가

        System.out.println(integerList);

        Collections.sort(integerList);
        System.out.println(integerList);

        System.out.println(integerList.size());
        //interList.remove(3); 인덱스 3번째 데이터 삭제

        for(int i = 0; i < integerList.size(); i++) {
            System.out.println(integerList.get(i));
        }
        // 리스트-> for/each문 사용 가능
        for(int current : integerList) { //인덱스 없는 반복문
            System.out.println(current);
        }
    }
}

HashSet 예제

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

public class Main {
    public static void main(String[] args) {
        /*인터페이스 형태, primitive 변수는 사용이 안된다!-> 참조형변수*/
        Set<Integer> integerSet = new HashSet<>();/*클래스*/
        integerSet.add(1);
        integerSet.add(1);
        integerSet.add(20);
        integerSet.add(123);
        integerSet.add(50);
        System.out.println(integerSet);

        Set<String> stringSet = new HashSet<>();
        stringSet.add("서울");
        stringSet.add("부산");
        stringSet.add("부여");
        stringSet.add("LA");
        System.out.println(stringSet);
        //stringSet.remove("서울");

        List<String> target = new ArrayList<>();
        target.add("뉴욕");
        target.add("라스베가스");
        target.removeAll(target);

        System.out.println("LA 포함되어 있나요? " + stringSet.contains("LA")); // 데이터 자료구조 체크
        System.out.println("라스베가스 포함되어 있나요? " + stringSet.contains("라스베가스"));

        System.out.println(stringSet.size());
        target.clear();
        System.out.println(target);
    }
}

HashMap 예제

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        //map은 인자로 키를 취급한다
        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));
        //get은 인덱스가 아니라 키로 할당된 값을 받는다

        map.remove(2);

        System.out.println(map.containsKey(3));
        System.out.println(map.containsValue("berry"));
        System.out.println(map);
    }
}

Stack 예제

import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        stack.push(1);
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(5);
        System.out.println(stack); //중복값 허용, 순서대로 저장됨

        System.out.println(stack.peek()); //get만 할께
        System.out.println("size: " + stack.size());
        System.out.println(stack.pop()); //보면서 꺼낼께
        System.out.println(stack);
        System.out.println("size: " + stack.size());

        System.out.println(stack.contains(1));
        //java에 있는 stack에서 제공하는 contain
        System.out.println(stack.empty()); //스택이 비어있니?
        stack.clear();
        System.out.println(stack.isEmpty()); //스택이 비어있니?
    }
}

Queue 예제

import java.util.LinkedList;
import java.util.Queue;

public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();

        queue.add(1);
        queue.add(5);
        queue.add(3);
        System.out.println(queue); //입력된 순서가 있다

        System.out.println(queue.poll());
        System.out.println(queue); // poll은 stack의 pop과 같다
        System.out.println(queue.peek()); // = stack
    }
}

ArrayDeque : 실무에서 많이 사용, 양 끝에 삽입/삭제가 모두 가능하

https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTlEYaM-7bPz3FcrZhXGxefr39mZsxyzE2euQ&usqp=CAU

 

ArrayDeque 예제

import java.util.ArrayDeque;

public class Main {
    public static void main(String[] args) {
        ArrayDeque<Integer> arrayDeque = new ArrayDeque<>();
        arrayDeque.addFirst(1); //배열의 맨 앞에 값 추가
        arrayDeque.addFirst(1);
        arrayDeque.addFirst(2);
        arrayDeque.addFirst(3);
        System.out.println(arrayDeque); // 순서가 있고, 중복 값 인정

        arrayDeque.addLast(0); //배열의 맨 뒤에 값 추가
        System.out.println(arrayDeque);

        arrayDeque.offerFirst(10);
        //배열의 맨 앞에 들어간다
        // 큐의 크기문제가 생길때:
        // offerFirst -> false/ addFirst -> exception
        System.out.println(arrayDeque);
        arrayDeque.offerLast(30);
        System.out.println(arrayDeque);

        arrayDeque.push(22); // = addFirst, offerFirst
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.pop());
        System.out.println(arrayDeque.peek());
        System.out.println(arrayDeque.peekLast());
        System.out.println(arrayDeque.peekFirst());// stack에서 제공

        System.out.println(arrayDeque.poll()); // = push
        System.out.println(arrayDeque.pollLast());
        System.out.println(arrayDeque.pollFirst()); // queue에서 제공

        System.out.println(arrayDeque.size());
        arrayDeque.clear(); // collectiom 공통 size, clear, isEmpty 제공
        System.out.println(arrayDeque.isEmpty());
        System.out.println(arrayDeque);




    }
}
728x90