[Java] 자바 네트워크 채팅 프로그램 구현 ( 소켓, 유니 캐스팅 )
·
Java/코딩테스트 연습 & 실습
유니 캐스팅이란 서버와 클라이언트가 일대일로 통신하는 개념이다. 자바 소켓을 이용해서 유니 캐스팅 채팅 프로그램을 구현해 보았다. 구조 소스코드 📝 UnicastServer import java.io.*; import java.net.*; public class UnicastServer { private ServerSocket serverS; private UnicastServerThread ust; public UnicastServer(int port) { //포트번호 try { serverS = new ServerSocket(port); } catch(IOException ioe) { ioe.printStackTrace(); System.exit(0); } while(true) { try { Syst..
[Java] 자바 GUI AWT 사용법 ( 간단한 채팅 프로그램 구현 )
·
Java/자바 이론
AWT(Abstract Window Toolkit)는 GUI 프로그램을 제작하기 위해 자바에서 제공하는 라이브러리를 모아놓은 것이다. 운영체제가 제공하는 UI를 사용하기 때문에 플랫폼에 의존적이고 구성요소가 무겁다는 특징 때문에 요즘은 거의 사용하지 않는다고 한다. 하지만 비교적 쉽고, Java Swing이 AWT 기반이기 때문에 간단하게 한번 살펴보는 것도 좋을 듯하다. AWT 계층 및 구성요소 1. Container 프로그램창의 역할을 한다. 이 컨테이너 위에 컴포넌트들이 올라간다. 2. Component 화면을 담당하는 구성요소들이다. ( 버튼, 텍스트 필드 등 ) 3. Event 윈도우 프로그래밍에서 어떤 특정한 행동이 발생 한 그 자체를 의미한다. (ex 버튼 클릭 등) 이벤트 소스 : 이벤트가..
[Java] 자바 두 개의 큐(Queue)로 스택(Stack) 구현하기
·
Java/자바 이론
https://hyunki99.tistory.com/26 이전 글과 비슷하게 2개의 큐로도 스택을 구현할 수 있다. 큐는 많이 사용되는 자료구조 중 하나이다. 먼저 들어온 것이 먼저 나오는 구조로서 FIFO (First In First Out)의 형태를 띈다. 2개의 큐를 활용해서 스택을구현하는 방법을 알아보자. 1. 원리 1. 메인 큐와 임시 큐를 준비한다. 2. 메인 큐에 1개의 원소가 남을 때까지 dequeue하고, 임시 큐에 넣는다. 3. 마지막 남은 1개의 원소는 result 변수에 저장한다. 4. 임시 큐에 남아있는 원소들을 다시 메인 큐로 이동시킨다. 5. result를 리턴한다. 2. 예제코드 import java.util.LinkedList; import java.util.Queue; c..
[Java] 자바 두 개의 스택(Stack)으로 큐(Queue) 구현하기
·
Java/자바 이론
스택은 많이 사용되는 자료구조 중 하나이다. 나중에 들어온 것이 먼저 나오는 구조로서 LIFO (Last In First Out)의 형태를 띈다. 2개의 스택을 활용해서 큐를 구현하는 방법을 알아보자. 1. 원리 스택을 하나 사용하면 LIFO지만, 2개의 스택을 사용해서 FIFO(First in First Out) 형태인 큐 자료구조를 구현할 수 있다. 스택과 큐에서 자료가 어떤 방식으로 들어오고(push) 나가는지(pop)만 이해하면 어렵지 않다. 스택 : 1, 2, 3을 push하고 pop하면 3, 2, 1 순으로 나오게 된다. 큐 : 1, 2, 3을 enqueue하고 dequeue하면 1, 2, 3 순으로 나오게 된다. 즉, 스택과 큐는 서로 역순(reverse)이다. 나오는 자료를 역순 뒤집어 주..
[Java] 너비우선탐색 (BFS) 미로찾기 Queue구현
·
Java/코딩테스트 연습 & 실습
너비우선탐색(BFS) 최대한 넓게 이동한 후 더 이상 갈 수 없을 경우 아래로 이동한다. 인접한 노드를 먼저 탐색하고, 가장 멀리 떨어져 있는 정점을 가장 나중에 방문한다. 최단 경로를 찾고자 할 경우 주로 사용한다. 1. map : 갈 수 있는 길은 0, 갈 수 없는 길은 1이다. 2. enqueue한 길도 벽으로 변경하여 여러번 enqueue할 수 없도록 한다. (방문 처리) 3. class Index : Queue에 담을 객체 ( x와 y의 좌표를 가지고 있다.) 4. 현재 인덱스를 저장하고 있는 Index 클래스를 매개변수로 받아 findWay() 메서드에서 상하좌우를 탐색하고 enqueue한다. 5. enqueue한 Index를 dequeue해 위치를 이동한다. 0) { if (map[x-1][..
[Java] 깊이우선탐색 (DFS) 미로찾기 스택구현
·
Java/코딩테스트 연습 & 실습
깊이우선탐색(DFS) 최대한 깊이 내려간 후 더이상 깊이 갈 곳이 없을 경우 옆으로 이동한다. 미로찾기의 경우 최대한 한방향으로 쭉 직진한다. 더 이상 길이 없으면 스택을 pop하며 길을 찾아간다. 모든 노드를 방문하고자 할 경우 주로 사용하며 검색 속도는 너비우선탐색(BFS)보다 느리다. 따라서 최단 경로를 찾고 싶다면 BFS를 사용해야 한다. 1. map : 갈 수 있는 길은 0, 갈 수 없는 길은 1이다. 2. push한 길도 벽으로 변경하여 여러번 push할 수 없도록 한다. (방문 처리) 3. class Index : Stack에 담을 객체 ( x와 y의 좌표를 가지고 있다.) 4. 현재 인덱스를 저장하고 있는 Index 클래스를 매개변수로 받아 findWay() 메서드에서 상하좌우를 탐색하고 ..
[Java] 스택을 이용한 후위표기 계산기
·
Java/코딩테스트 연습 & 실습
중위표기를 후위표기로 바꾸는 계산기 실습 1. stack을 직접 구현 2. 컬렉션 stack 사용 1. stack 직접 구현 input : 113 + 11 - (32 - (9 - 2 + 6)) output : 113 11 + 32 9 2 - 6 + - - 1. strToStrArr() 메서드를 통해 문자열을 분리한다. 2. 분리한 문자열을 if문을 통해 후위계산식을 구한다. 3. 구한 후위계산식을 calC()메서드를 통해 계산결과를 얻는다. //후위표기법 (스택 구현) class MyStack { private String[] stk; //연산자 담을 배열 private int capacity; //스택 용량 private int ptr; // 스택 포인터 public MyStack() { ptr = -..
[Java] 이진검색 재귀함수로 구현하기
·
Java/코딩테스트 연습 & 실습
import java.util.Scanner; public class BinarySearchRecursion { // 2진검색 (재귀) static int binarySearch(int[] arr, int start, int end, int key) { // (배열, 시작 인덱스, 끝 인덱스, 찾을 값) if (start key) { return binarySearch(arr, start, mid -1, key); //중앙값이 찾으려는 값보다 크면 끝 인덱스를 중앙값-1로 설정 } else if (arr[mid] < key){ return binarySearch(arr, mid + 1, end, key); //중앙값이 찾으려는 값보다 작으면 시작 인덱스를 중앙값+1로 설정 } } return -1; //..