본문 바로가기

전체 글

자바의 정석 - 11.3 Stack과 Queue Stack과 Queue 스택(Stack)은 마지막에 저장한 데이터를 가장 먼저 꺼내는 LIFO(Last In First Out)구조임 큐(Queue)는 처음에 저장한 데이터를 가장 먼저 꺼내는 FIFO(First In First Out)구조임 순차적으로 데이터를 추가하고 삭제하는 스택에는 ArrayList와 같은 배열기반의 컬렉션 클래스가 적합함 큐는 항상 첫 번째 데이터를 삭제하므로 배열을 사용하면 항상 재배치가 일어나기 때문에 적합하지 않음 때문에, 큐는 데이터의 추가/삭제가 쉬운 LinkedList가 적합함 PriorityQueue 저장한 순서에 관계없이 우선순위가 높은 것부터 꺼냄 null은 저장할 수 없음 PriorityQueue는 저장공간을 배열을 사용하며, 힙(Heap) 자료구조 형태로 저장.. 더보기
자바의 정석 - 11.2 ArrayList 11.2.1 ArrayList ArrayList는 Object배열을 이용해서 데이터를 순차적으로 저장함Java transient이란? public class ArrayList extend AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable{ ... transient Object[] elementData; // Object배열 } 선언된 배열의 타입이 모든 객체의 최고조장인 Object이기 때문에 모든 종류의 객체를 담을 수 있음 ArrayLsit는 List를 구현했기 때문에, 저장된 순서를 유지함 생성할 때 지정한 크기보다 더 많은 객체를 저장하면 자동적으로 크기가 늘어나긴 하지만, 이 과정에서 처리시간이 많이 소요됨 💡.. 더보기
자바의 정석 - 11.1 컬렉션 프레임웍 11.1.1 컬렉션 프레임웍과 핵심 인터페이스 컬렉션 프레임웍이란 데이터 군을 저장하는 클래스들을 표준화할 설계이다. 컬렉션 프레임웍은 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화 되었기 때문에 편리하고 재사용성이 높은 코드를 작성할 수 있다는 장점이 있다. 컬렉션 프레임웍에서는 컬렉션데이터 그룹을 크게 3가지 타입이 존재한다고 인식하고, 각 컬렉션을 다루는데 필요한 기능을 가진 3개의 인터페이스를 정의하였다. List : 순서가 있는 데이터의 집합. 데이터의 중복을 허용함 Set : 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않음 Map : 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합. 키의 중복은 허용하지 않으나, 값의 중복은 허용함 💡 Map인터페.. 더보기
프로그래머스 - 두 큐 합 같게 만들기(Java) 서로 다른 두 개의 배열이 주어졌을 때, 두 배열의 합을 같게 만드는 문제입니다. 각 배열의 길이를 n이라고 했을 때, 두 개 배열의 길이는 때문에 2n입니다.(조건에 의해 두 개의 배열 길이는 같습니다.) 두 개의 배열을 하나로 합치고, 두 개의 포인터를 사용하면 이 문제를 풀 수 있습니다. 배열의 이름을 qu라고 했을 때, 첫 번째 포인터의 초기 위치는 qu[0]입니다. 두 번째 포인터 초기 위치는 qu[n]입니다. 첫 번째 포인터 위치부터 두 번째 포인터 위치까지의 합이 두 배열의 합의 절반이 되게 해야합니다. 이러기 위해서는 배열의 합이 전체의 절반보다 크면 첫 번째 포인터의 위치를 앞으로 옮겨 배열의 크기를 줄이고, 배열의 합이 전체의 절반보다 작으면 두 번째 포인터의 위치를 옮겨 배열의 크기를.. 더보기
프로그래머스 - 성격유형 검사하기(Java) 구현문제입니다. survey와 choice에 따라 어떤 사람이 점수를 얻는지를 판별하면 되는 문제입니다. 설문에 참여하는 사람은 8명으로 정해져 있습니다. [구현 코드] public class Solution { private static class Solution{ // 순서대로 R ,T, F, C, M, J, A, N private static int[] count = new int[8]; private static char[] arr = {'R', 'T', 'F','C', 'M', 'J', 'A', 'N'}; private static int point(int value){ if(value==1 || value==7){ return 3; }else if(value==2 || value==6){ re.. 더보기
프로그래머스 - 등산 코스 정하기(Java) 다익스트라를 활용한 문제입니다. 자세한 설명은 https://tech.kakao.com/2022/07/13/2022-coding-test-summer-internship/에 있으니 꼭 읽어보시기 바랍니다. 문제 핵심은 입구와 산봉우리를 단방향, 쉼터는 양방향 그래프로 만드는 것입니다. 입구에서 정상까지 가는 경로가 최소이면 돌아오는 경로도 똑같이 최소인 경로로 돌아오면 되므로 입구에서 산봉우리까지 가는 경우의 경로만 생각하시면 됩니다. 또한, 경로가 단조 증가하는 형태를 띄기때문에(예를 들어, A-B-C 경로의 intensity가 3이라면 A-B-C-D 경로의 intensity가 3보다 작아질 수는 없습니다) 일반적인 다익스트라 코드가 아래와 같다면 if dist[to] > dist[from] + wei.. 더보기
자바의 정석 - 16.7 UDP 소켓 프로그래밍 16.7.1 UDP 소켓 프로그래밍 DatagramSocket을 사용하여 데이터를 DatagramPacket에 담아 전송 DatagramPacket는 헤더와 데이터로 구성. 헤더에는 IP 및 Port 저장 16.7.2 Server와 Client 연결 예제 Server public class UdpServer { public void start() throws IOException { // 포트 7777번을 사용하는 소켓을 생성한다. DatagramSocket socket = new DatagramSocket(7777); DatagramPacket inPacket, outPacket; byte[] inMsg = new byte[10]; byte[] outMsg; while(true) { // 데이터를 수신.. 더보기
자바의 정석 - 16.6 TCP 소켓 프로그래밍 16.6.1 TCP 소켓 프로그래밍 순서 서버 프로그램에서 서버소켓을 사용하여 클라이언트의 연결요청 처리 준비 클라이언트 프로그램에서 IP와 포트 정보로 소켓을 생성하여 서버에 연결 요청 서버소켓이 연결요청을 받으면 새로운 소켓을 생성하여 클라이언트 소켓과 연결 서버소켓과 관계없이 서버의 새로운 소켓과 클라이언트 소켓간의 1:1 통신 소켓(socket) - 프로토콜 + IP + 포트. - InputStream과 OutputStream 보유 💡 여러 개의 소켓이 하나의 포트 공유 가능. 서버 소켓은 포트 독점 16.6.2 Server와 Client 연결 예제 Server public class TcpIpServer { public static void main(String args[]) { ServerSo.. 더보기