Java/코딩테스트 연습 & 실습

    [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] 너비우선탐색 (BFS) 미로찾기 Queue구현

    [Java] 너비우선탐색 (BFS) 미로찾기 Queue구현

    너비우선탐색(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) 미로찾기 스택구현

    깊이우선탐색(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] 이진검색 재귀함수로 구현하기

    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; //..

    [Java] (실습) Baby-gin

    필요하다고 생각한 메서드 : run( ArrayList arr ) : arr 안에 i, i+1, i+2가 존재하면 true 반환 triplete( ArrayList arr ) : arr 안에 i가 3번 이상 존재하면 true 반환 caseCheck( ArrayList arr ) : RR RT TR TT 가 둘 다 true이면 true 반환 , 아니면 flase babyGin( String str ) : 입력받은 문자열을 한 글자씩 int로 변환해 어레이리스트에 저장 caseCheck메서드가 true면 baby-gin 출력 import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class Q3 { s..

    [Java] (실습) 자바 정돈된 수

    import java.util.ArrayList; import java.util.Scanner; public class Q2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); try { System.out.println("Input X Number : "); int x = sc.nextInt(); System.out.println("Input Y Number : "); int y = sc.nextInt(); orderlyNumber(x,y); } catch(Exception e) { System.out.println("잘못 입력하셨습니다. "); } } // x~y 까지의 정돈된 수를 출력 public stati..

    [Java] (실습) 자바 로또 프로그램

    import java.util.LinkedHashSet; import java.util.Random; class Lotto{ private int[] arr; // 당첨번호 public Lotto(){ arr = new int[7]; setArr(); } public int[] getArr() { return arr; } public void setArr() { LinkedHashSet a = new LinkedHashSet(); Random rand = new Random(); int cnt=0; //중복 없이 7개 숫자 저장 while(a.size()